begin process at 2012 02 13 12:21:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > ECRIRE DANS LE JOURNAL DES EVENEMENTS EVENTVIEWER

ECRIRE DANS LE JOURNAL DES EVENEMENTS EVENTVIEWER


 Information sur la source

Note :
10 / 10 - par 4 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :ecrire, eventviewer, evenements, journal, erreurs Niveau :Débutant Date de création :19/08/2005 Date de mise à jour :19/08/2005 14:26:36 Vu :8 649

Auteur : thierrydelepine

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

ce petit code a mettre dans un module peut etre tres pratique pour enregistrer des erreurs dans le journal des evenements de Windows (EventViewer) a partir de votre programme VB.
Cela peut servir via des outils de supervision à trapper des erreurs via l'ID de l'evenement par exemple.


Exemple d'utilisation :

Const IDEvent = 1111
NomSource = app.ExeName
Result = WriteToEventViewer("Mon message d'erreur", vbLogEventTypeError, IDEvent, NomSource)

Source

  • a mettre dans un module :
  • Option Explicit
  • Public Enum enmLogType
  • LogError = 1&
  • LogWarning = 2&
  • LogInfo = 4&
  • End Enum
  • Public Enum enmErrLevel
  • lInfo = &H60000000
  • lWarning = &HA0000000
  • lError = &HE0000000
  • End Enum
  • Private Declare Function RegisterEventSource Lib "advapi32" Alias "RegisterEventSourceA" (ByVal lpUNCServerName As String, ByVal lpSourceName As String) As Long
  • Private Declare Function DeregisterEventSource Lib "advapi32" (ByVal hEventLog As Long) As Long
  • Private Declare Function ReportEvent Lib "advapi32" Alias "ReportEventA" (ByVal hEventLog As Long, ByVal wType As Long, ByVal wCategory As Long, ByVal dwEventID As Long, ByVal lpUserSid As Long, ByVal wNumStrings As Long, ByVal dwDataSize As Long, lpStrings As Any, lpRawData As Any) As Long
  • Public Function WriteToEventViewer(sErrMsg As String, eEventType As LogEventTypeConstants, IDEvent As Integer, Optional sSourceName As String) As Boolean
  • On Error Resume Next
  • Dim lEventLogHwnd As Long
  • Dim LogType As enmLogType
  • Dim lEventID As Long
  • Dim lCategory As Long
  • Dim sServerName As String
  • Dim lRet As Long
  • WriteToEventViewer = True
  • If sSourceName = "" Then sSourceName = App.EXEName
  • lCategory = 0
  • sServerName = vbNullString
  • If eEventType = vbLogEventTypeError Then
  • LogType = LogError
  • lEventID = IDEvent Or enmErrLevel.lError
  • ElseIf eEventType = vbLogEventTypeInformation Then
  • LogType = LogInfo
  • lEventID = IDEvent Or enmErrLevel.lInfo
  • ElseIf eEventType = vbLogEventTypeWarning Then
  • LogType = LogWarning
  • lEventID = IDEvent Or enmErrLevel.lWarning
  • End If
  • lEventLogHwnd = RegisterEventSource(lpUNCServerName:=sServerName, lpSourceName:=sSourceName)
  • If lEventLogHwnd = 0 Then
  • WriteToEventViewer = False
  • Exit Function
  • End If
  • lRet = ReportEvent(hEventLog:=lEventLogHwnd, wType:=LogType, wCategory:=lCategory, dwEventID:=lEventID, lpUserSid:=0, wNumStrings:=1, dwDataSize:=0, lpStrings:=sErrMsg, lpRawData:=0)
  • If lRet = False Then
  • WriteToEventViewer = False
  • End If
  • DeregisterEventSource lEventLogHwnd
  • End Function
a mettre dans un module :

Option Explicit
Public Enum enmLogType
   LogError = 1&
   LogWarning = 2&
   LogInfo = 4&
End Enum

Public Enum enmErrLevel
   lInfo = &H60000000
   lWarning = &HA0000000
   lError = &HE0000000
End Enum

Private Declare Function RegisterEventSource Lib "advapi32" Alias "RegisterEventSourceA" (ByVal lpUNCServerName As String, ByVal lpSourceName As String) As Long
Private Declare Function DeregisterEventSource Lib "advapi32" (ByVal hEventLog As Long) As Long
Private Declare Function ReportEvent Lib "advapi32" Alias "ReportEventA" (ByVal hEventLog As Long, ByVal wType As Long, ByVal wCategory As Long, ByVal dwEventID As Long, ByVal lpUserSid As Long, ByVal wNumStrings As Long, ByVal dwDataSize As Long, lpStrings As Any, lpRawData As Any) As Long




Public Function WriteToEventViewer(sErrMsg As String, eEventType As LogEventTypeConstants, IDEvent As Integer, Optional sSourceName As String) As Boolean
    On Error Resume Next
    
    Dim lEventLogHwnd As Long
    Dim LogType As enmLogType
    Dim lEventID As Long
    Dim lCategory As Long
    Dim sServerName As String
    Dim lRet As Long
   
    WriteToEventViewer = True
    If sSourceName = "" Then sSourceName = App.EXEName
    lCategory = 0
    sServerName = vbNullString
            
    If eEventType = vbLogEventTypeError Then
        LogType = LogError
        lEventID = IDEvent Or enmErrLevel.lError
    ElseIf eEventType = vbLogEventTypeInformation Then
        LogType = LogInfo
        lEventID = IDEvent Or enmErrLevel.lInfo
    ElseIf eEventType = vbLogEventTypeWarning Then
        LogType = LogWarning
        lEventID = IDEvent Or enmErrLevel.lWarning
    End If
    
    lEventLogHwnd = RegisterEventSource(lpUNCServerName:=sServerName, lpSourceName:=sSourceName)
    
    If lEventLogHwnd = 0 Then
        WriteToEventViewer = False
        Exit Function
    End If
    
    lRet = ReportEvent(hEventLog:=lEventLogHwnd, wType:=LogType, wCategory:=lCategory, dwEventID:=lEventID, lpUserSid:=0, wNumStrings:=1, dwDataSize:=0, lpStrings:=sErrMsg, lpRawData:=0)
                       
    If lRet = False Then
        WriteToEventViewer = False
    End If
                       
    DeregisterEventSource lEventLogHwnd
End Function



 Conclusion

ATTENTION quand meme a ne pas polluer le journal des evenements avec trop d'enregistrements.

Vous pouvez bien entendu laisser vos commentaires et noter, cela fait toujours plaisir (ou pas, ça depend de votre gentillesse).


 Historique

19 août 2005 14:26:36 :
ajout de commentaire

 Sources du même auteur

Source avec Zip Source avec une capture SHORTCUTBAR BARRE DE LANCEMENT RAPIDE STYLE OFFICE
Source avec Zip EXECUTER EN TANT QUE UN AUTRE PROGRAMME
MODIFIER LA VALEUR TTL D'UN CONTROLE WINSOCK
DETERMINER SI LE FIREWALL WINDOWS EST ACTIF
DETERMINER SI ON A DES DROITS ADMINISTRATEUR

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) INFOTRACE BASE DE DONNÉES HTML par LightningStrike
Source avec Zip Source avec une capture ÉCRIRE SUR LE WALLPAPER par Rafale71
Source avec Zip Source avec une capture Source .NET (Dotnet) CALCULATEUR DE RESISTANCE .NET par elguevel
Source avec Zip Source avec une capture Source .NET (Dotnet) ERROR LISTER par Vince300
Source avec Zip Source avec une capture UN GRAPHIQUE 3D TOUT EN MOUVEMENT par bigfish_le vrai

Commentaires et avis

Commentaire de purplespot le 21/08/2005 09:16:57

Merci pour ce code qui peut être bien pratique dans certans cas.

Commentaire de DrJo45 le 22/08/2005 10:56:57

Très interressant. J'avais pensé utiliser StartLogging et LogEvent de l'objet App, mais je n'ai jamais réussi à en tirer quoi que ce soit alors ton code est le bienvenu !
A propos, si quelqu'un sait comment ces méthodes de l'objet App fonctionnent il est le bienvenu. Merci d'avance

Commentaire de JuanedaEr le 22/06/2006 14:34:54

Quand j'utilise le code sous Windows 2000 SP4, la description de l'événement est précédé de :
"Impossible de trouver la description de l'ID d'événement ( X ) dans la source ( Xxxx ). L'ordinateur local n'a peut-être pas les informations de Registre nécessaires ou les fichiers DLL de messagerie pour afficher les messages provenant d'un ordinateur distant"

Commentaire de JuanedaEr le 22/06/2006 14:38:28

Pour répondre à DrJo45, LogEvent fonctionne uniquement quand le programme est compilé.

Commentaire de thierrydelepine le 23/06/2006 09:59:06

"Impossible de trouver la description de l'ID d'événement ( X )  ....." apparait sous tous OS (200, XP, 2003), je n'ai jamais trouvé la solution.
Il manque une sorte de ressource dans le prog VB ou l'ID serait identifié, j'ai longtemps cherché mais pas trouvé.
Mais ceci dit le code reste pratique car on peut ecrire dans le journal des evenements avec l'ID et le nom de source que l'on veut.

Commentaire de DrJo45 le 23/06/2006 10:17:55

Merci à JuanedaEr pour l'info.
A mon tour de donner un coup de main :
Cherchez Q166902 sur internet et vous saurez qu'il manque une entrée dans la base de registre pour que l'event viewer puisse afficher correctement l'application qui a loggé l'erreur.
(dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog)

Commentaire de JuanedaEr le 23/06/2006 14:27:29

En attendant de gérer les messages via une DLL, j'ai posté un code sous le nom 'ECRIRE DANS LE JOURNAL DES EVENEMENTS (METHODE 2)'. Il n'utilise pas d'API. Le nom de la source des messages n'est pas modifiable (WSH) et l'EventID est lié au type d'information (warning, info ,error).

Commentaire de thierrydelepine le 23/06/2006 17:54:16

Le probleme d'ecrire dans le journal des evenements par WSH est que la source du message est WSH donc pas possiblité de savoir quel est le programme qui ecrit dans le journal (si on a deux programmes qui tourne sur la meme machine comment savoir lequel ?) c'est pour ça que j'utilise la methode par API.

merci a DrJo45 pour l'info, j'avais cherché un long moment sans trouvé, je vais regarder.

Apres de nombreux test (entre WSH et API), la solution la plus propre etait par API.

Commentaire de thierrydelepine le 23/06/2006 18:09:25

je viens de faire un test en ajoutant dans le registre le nom de mon appli sous la clé :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\ "Mon APPLI"
puis en ajoutant les clés :
TypesSupported = 7 (en DWORD)
et EventMessageFile =  le chemin de mon EXE (en MULTI_SZ)

et cela ne fonctionne toujours pas en a toujours le message dans le log : "impossible de trouver ....."

Si quelqu'un a une solution testée et qui peut faire une description de ce qu'il faut mettre exactement dans le registre, je suis prenneur ?

Commentaire de JuanedaEr le 27/06/2006 09:14:38

J'ai posté dans la rubrique 'système' un code intitulé 'ECRIRE DANS LE JOURNAL DES EVENEMENTS (METHODE 3)'qui résous les problèmes évoqués. Il utilise une DLL (msgfile.dll) qui référence des messages libres numérotés de 0 à 9999. Je posterais un prochain code qui s'affranchira de la DLL.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comment ecrire dans le journal des evenement windows [ par logik51 ] salut,je cherche comment ecrire dans le journal des evenements windows...Merci @+ Ecrire des evenements système NT4 [ par flo ] Bonjour,Je cherche à ce que mon appli vb6 puisse écrire dans les logs d'erreurs système de NT4 (log events).On m'a parle de app.logevents(messErreur, Ecrire le titre des colonnes verticalment dans dbgrid [ par lacourne ] Comment écrire le titre des colonnes verticalment dans dbgrid.Merci Besoin d'aide sur des message d'erreurs [ par Dom ] Bonjour,J'ai crée une application de base de données en vb6 qui fonctionneparfaitementsur le pc où elle à été programmée, mais en l'installant sur un Petit Pb ListView [ par Cyril ] Bonjour a tous,il semblerait que listview soit un control vraiement super. Par contre ,je n'ai que l'aide de MSDN pour apprendre, et franchement j'ai MP3 ID et chaines ??? [ par Cyril ] Deja Bonjour a tous,je suis entrain d'ecrire un soft pour faire du renommage de MP3, j'ai vue pas mal de soft faire ce que je ceux faire, mais moi j'y URGENT : ecrire direct sur un disque(pas ds 1 fichier) [ par Profnul ] QQu'un sait il comment écrire directement sur les secteurs d'un disque dur ou d'une disquette.c'est URGENT.Merci à tous pour les éventuelles réponses. GESTION DES ERREURS [ par Alain ] Bonjour,J'ai réalisé un programme ou on rentre par l'intermédiaire d'un INPUT BOX une variable pour ouvrir une application Excel (feuille Excel). Pour


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales