Bonjour
tout d'abord bravo pour votre tutoriel, car c'est le plus complet que j'ai pu trouver sur le web, et de surcroit en francais.
Toutefois, je me permets de faire les commentaires ou compléments suivants dans le cas où la journalisation se fait depuis .NET :
1) pour que les caractères accentués contenus dans les textes des évènements et des catégories (ceux qui sont dans les fichiers .mc) soient correctement affichés dans l'event viewer :
- il n’y a pas besoin d'Unicode pour ça, l'ANSI suffit ; le fichier .mc lui-même doit être encodé en ANSI.
- il faut utiliser les options -a ET -A pour la commande mc.exe (par défaut c'est -U -pour Unicode - et les caractères accentués n'apparaissent pas ;
2) les ID d’évènements et de catégories sont à récupérer dans les fichiers .h qui sont générés lors de la compilation du fichier .mc.
Il faut traduire les définitions comme suit :
#define EVENT_ID_1 ((DWORD)0x200001002L)
va devenir
Private Const EVENT_ID_1 as Long = &H200001002L
C’est cette valeur qui doit être fournie aux méthodes WriteEvent de la classe EventLog.
3) Pour les catégories, il y a quelque chose que je ne comprends pas :
Les API telles que ‘ReportEvent’, de même que les méthodes de la classe EventLog, prennent un entier 16 bits en argument pour l’ID de catégorie.
Or si je mets l’instruction MessageIdTypeDef=WORD (et non DWORD) dans le fichier categories.mc, j’obtiens bien des définitions d’ID telles que :
#define CAT_ID_1 ((WORD)0x000000001L)
. Jusque là tout va bien, SAUF que si je mets l’option c à la commande mc.exe, l’ID de catégorie devient 0x200000001L, et là ça n’est plus du tout un WORD, mais un DWORD, et il y a un dépassement de capacité lors des appels à ‘ReportEvent’ ou à ‘EventLog.WriteEvent’.
Donc je ne comprends pas pourquoi on pourrait utiliser le ‘Customer bit’ pour les messages, et non pour les catégories.
4) en .NET il n'y a pas d'équivalent à Success pour la Severity, il n'y a que Information.
5) je ne comprends pas l’intérêt de spécifier l’option « Severity= » dans les fichiers .mc, puisque lors de l’inscription d’un évènement dans le journal avec ‘EventLog.WriteEvent’ :
- soit on ne spécifie pas de niveau de « sévérité », auquel cas c’est ‘Information’ qui est mis par défaut, et absolument pas la valeur spécifie pour « Severity= » dans le fichier .mc ;
- soit on spécifie un niveau de « sévérité », auquel cas c’est cette valeur qui est utilisée, en REMPLACEMENT de la valeur spécifie pour « Severity= » dans le fichier .mc
6) idem pour l’option « Facility= »
Lors de l’appel aux méthodes de la classe EventLog :
- soit on utilise les versions statiques (Shared), auquel cas on ne spécifie pas de journal particulier, et l’évènement est inscrit dans la première source existante qui porte le nom voulu ;
- soit on utilise les méthodes d’instance, auquel cas il faut instancier la classe ‘EventLog’ en pointant sur un journal précis, et là aussi la valeur contenue dans « Facility= » est ignorée
A la condition de surmonter toutes ces petites difficultés, ça fonctionne nickel, même sous Windows 7.
Voilà, s’il me revient d’autres détails, je complèterai.
Hope this helps !
Chris
Partager