none
imposible de générer la class de logg avec mc.exe RRS feed

  • Question

  • Bonjour,
    je travaille sur un system de log qui permet d'écrire dans un fichier de log, dans le syslog et d'envoyer des traps snmp vers une console d'admin.
    pour l'envoi de trap snmp, j'utilise evntwin.
    Actuellement, j'ai une version C++ qui marche bien et je voudrais utiliser le même système depuis C#.
    je me suis inspiré de cette page : http://msdn.microsoft.com/en-us/library/system.diagnostics.eventloginstaller.categorycount.aspx
    en regardant la doc de mc.exe, je me suis rendu compte qu'il existait une option -cs ou -css qui permet de générer une class C# permettant de faciliter l'utilisation du system.

    Malheureusement, le code généré ne marche pas.

    Je pense que j'ai du oublier une étape, mais je ne vois pas.

    pouvez vous m'aider??

    Merci


    PS: voici la commande utilisé MC.exe -cs EventLogs.mc
    • Modifié rogelio canedo mercredi 6 janvier 2010 12:59 j'avais oublier la commande
    mercredi 6 janvier 2010 12:51

Réponses

  • Re,
    bah comme personne ne répondait, je me suis codé mon propre outil.

    using System;
    using System.Text;
    using System.IO;
    
    namespace MCcs
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (args.Length < 4)
                {
                    Console.WriteLine("MCcs.exe -ns <namespace> -mc <file>");
                }
                else
                {
                    String namespaceStr = null;
                    String mcFile = null;
                    StreamReader file;
    
                    StreamWriter codeCS;
    
                    for (int i = 0; i < 3; i=i+2)
                    {
                        if (args[i] == "-ns")
                        {
                            if (args[i + 1][0] != '-')
                                namespaceStr = args[i + 1];
                            else
                            {
                                Console.WriteLine("Vous devez obligatoirement spécifier un namespace.");
                                Console.WriteLine("MCcs.exe -ns <namespace> -mc <file>");
                                System.Environment.Exit(0);
                            }
                        }
    
                        if (args[i] == "-mc")
                        {
                            mcFile = @args[i + 1];
                        }
                    }
    
                    if (File.Exists(mcFile))
                    {
    
                        codeCS = new StreamWriter(@"./logWrapper.cs");
                        codeCS.WriteLine("using System;");
                        codeCS.WriteLine("namespace {0}", namespaceStr);
                        codeCS.WriteLine("{");
                        codeCS.WriteLine("  public class logWrapper");
                        codeCS.WriteLine("  {");
                        
                        String ID;
                        int oldID = 0, curentID = 0;
                        file = new StreamReader(mcFile);
                        string ligne;
                        while ((ligne = file.ReadLine()) != null)
                        {
                            if (ligne.Length > 0 && ligne[0] != ';')
                            {
                                if (ligne.Contains("MessageId") && !ligne.Contains("MessageIdTypedef"))
                                {
                                    ID = ligne.Split('=')[1];
                                    if (ID.Contains("+"))
                                        curentID = oldID + System.Convert.ToInt32(ID.Substring(ID.IndexOf('+')));
                                    else
                                        curentID = System.Convert.ToInt32(ID.Substring(1));
                                }
                                else if (ligne.Contains("SymbolicName"))
                                {
                                    codeCS.WriteLine("      public static int {0}={1};", ligne.Split('=')[1], curentID);
                                }
                                if(ligne[0] == '.')
                                {
                                    oldID = curentID;
                                    curentID = 0;
                                }
                            }
                        }
                        codeCS.WriteLine("  }");
                        codeCS.WriteLine("}");
                        codeCS.Flush();
                        codeCS.Close();
                        file.Close();
                    }
                    else
                    {
                        Console.WriteLine("imposible de charger le fichier {0} verifier qu'il existe", mcFile);
                    }
                }
            }
        }
    }
    le code demande a être perfectionné mais il marche...

    je suis preneur si vous avez des commentaires.
    • Marqué comme réponse Alex Petrescu jeudi 7 janvier 2010 09:49
    mercredi 6 janvier 2010 16:13