7
votes

Où puis-je trouver un bon exemple d'utilisation de la fonction redevoir?

Comme avec la plupart des pages MSDN "héritage", la page pour ReindreEvent a trop peu d'informations pour que je fasse beaucoup de sens. J'ai essayé de chercher, mais je ne trouve pas de bon exemple simple de l'utilisation de la fonction. Quelqu'un pourrait-il suggérer un?


0 commentaires

4 Réponses :


1
votes

Comme je me souviens que c'est une douleur à configurer correctement - vous devez ajouter des messages à votre application à l'aide du compilateur de messages - Si vous ignorez cela, vous ne verrez que des messages utiles uniquement des codes d'erreur. Jetez un coup d'œil à Création d'un service Windows NT en utilisant ATL pour un exemple


0 commentaires

4
votes

J'ai fini par utiliser ceci:

HANDLE eventLog;
WORD type;
const char* msg;

// ... snip ...

ReportEvent(eventLog, type, 0, 1, NULL, 1, 0, &LPCTSTR(msg), NULL);


1 commentaires

Le problème avec cette solution est qu'il enregistre le jumble (CF: "La description de l'ID d'événement 1 à partir de la source xyz.exe est introuvable" sur Windows Vista).



4
votes

Bien cela semble être un très vieux fil, atterri ici à la recherche d'un bon exemple d'événement de rapport ... mais vous n'avez reçu aucune réponse ... et aurait probablement déjà trouvé la solution.

La raison pour laquelle vous voyez "ID d'événement non trouvé" est que l'événementViewer n'est pas en mesure de charger / rechercher la ressource texte à afficher pour l'ID d'événement. Désolé si la dernière ligne semblait geek

  • Enregistrement avec EventLog (ou dans d'autres termes de création d'événementsSource) Li>
  • enregistrer ou écrire dans le journal des événements li>
  • visualisation ou lecture du journal li> ol>

    Lorsque vous vous enregistrez dans le journal des événements, vous spécifiez simplement une SEEFESSOURCE (n'importe quel nom identifiant ce journal) + EventMessageFile, Fichier de catégorie et SoutenedEventTypes. Ici EventMessageFile Points à une DLL / EXE contenant vos descriptions / ressources de message. P>

    Lorsque vous enregistrez un événement, vous le connectez simplement avec des données telles que Econid, ID de catégorie et EventData. Mais lorsque vous le visualisez à l'aide de n'importe quel événementViewer (ou Windows Eventvwr.exe), le spectateur lit vos événements, recherche une DLL / EXE associée à votre événement Source (pointué par EventMessageFile) et rend la troncription de la section de ressource de cette DLL / EXE . P>

    Cette DLL n'est qu'un simple fichier de ressources compilé à l'aide de Messagecompiler et contient une "messageuse". Ceci est fait pour fournir une journalisation d'événements spécifique à la culture p>

    C'est la raison, lorsque vous exportez la connexion à XML / TXT, etc. à partir de votre événementViewer, il vous demande si vous souhaitez l'enregistrer "avec l'affichage informaion" ou "Sans informations d'affichage", de sorte que vous puissiez le visualiser sur des ordinateurs qui n'ont pas d'événementMessageFile. p>

    JFYI L'entrée REG est située à: p>

    HKLM\CurrentControlSet\System\Services\EventLog\Application
    

  • 1 commentaires

    Si vous n'avez pas besoin de messages spécifiques à la langue / culture, vous pouvez générer une DLL de message qui contient uniquement un identifiant (E.G. Generic_Message) qui correspond à une ressource "% 1". Ensuite, vous enregistrez cette DLL pour votre application et transmettez simplement la chaîne à afficher dans la visionneuse d'événements sous le 1er paramètre sur ce message. Cette méthode est décrite dans CodeProject .Com / Articles / 3995 / ... Mais soyez conscient d'utiliser le drapeau «-c» lors de l'invocation de «MC» pour l'exemple de travail!



    0
    votes

    L'exemple de Windows Service C ++, est un rapport de service Windows au journal des événements, vous pouvez obtenir le code de https://code.msdn.microsoft.com/windowsapps/cppwindowsservice-cacf4948 En particulier, la fonction suivante (citée de ServiceBase.cpp) est-elle

    //
    //   FUNCTION: CServiceBase::WriteEventLogEntry(PWSTR, WORD)
    //
    //   PURPOSE: Log a message to the Application event log.
    //
    //   PARAMETERS:
    //   * pszMessage - string message to be logged.
    //   * wType - the type of event to be logged. The parameter can be one of 
    //     the following values.
    //
    //     EVENTLOG_SUCCESS
    //     EVENTLOG_AUDIT_FAILURE
    //     EVENTLOG_AUDIT_SUCCESS
    //     EVENTLOG_ERROR_TYPE
    //     EVENTLOG_INFORMATION_TYPE
    //     EVENTLOG_WARNING_TYPE
    //
    void CServiceBase::WriteEventLogEntry(PWSTR pszMessage, WORD wType)
    {
        HANDLE hEventSource = NULL;
        LPCWSTR lpszStrings[2] = { NULL, NULL };
    
        hEventSource = RegisterEventSource(NULL, m_name);
        if (hEventSource)
        {
            lpszStrings[0] = m_name;
            lpszStrings[1] = pszMessage;
    
            ReportEvent(hEventSource,  // Event log handle
                wType,                 // Event type
                0,                     // Event category
                0,                     // Event identifier
                NULL,                  // No security identifier
                2,                     // Size of lpszStrings array
                0,                     // No binary data
                lpszStrings,           // Array of strings
                NULL                   // No binary data
                );
    
            DeregisterEventSource(hEventSource);
        }
    }
    


    0 commentaires