Pregunta

Por lo que entendí, el Reportero la función requiere Archivos de texto de mensaje asociado a través del registro para recibir mensajes con formato adecuado. ¿Hay alguna ID de evento común o alguna forma simple de informar un evento sin mensajes de texto asociados?

O puede ser, ¿hay una fuente especial de eventos comunes que pueda usar en mi aplicación? ¿Algo como RegisterEventSource (NULL, "Aplicación")?

¿Fue útil?

Solución

No, solo tiene que seguir las reglas y definir los archivos de texto de su mensaje, convertirlos en recursos, vincularlos a su aplicación, etc.

los Ejemplo proporcionado en MSDN Te lleva a través de todo lo que necesitas hacer.

Otros consejos

Prueba esto, me ha funcionado antes ...

http://www.codeproject.com/kb/system/xeventlog.aspx

No tener Para registrar sus mensajes en HKLM. (Lo cual es algo bueno, porque tu no poder Registre los mensajes si no es un administrador).

Pero eso no le impide escribir eventos en el registro de eventos de aplicación de Windows. El único inconveniente es que, comenzando con Windows Vista, solo obtendrás un texto feo junto con él.

HRESULT LogToEventLog(String Source, String EventText, int EventType, DWORD EventID)
{
   /*
      EventType is one of:
         EVENTLOG_ERROR_TYPE       = $0001;
         EVENTLOG_WARNING_TYPE     = $0002;
         EVENTLOG_INFORMATION_TYPE = $0004;
         EVENTLOG_AUDIT_SUCCESS    = $0008;
         EVENTLOG_AUDIT_FAILURE    = $0010;

      Source is your name for your app or feature, e.g.:
         "My Cool App"
         "Outlook"    
         "ESENT"
         "Chrome"
   */

   HANDLE h = RegisterEventSource(null, Source); //null --> local computer
   if (h == 0) 
      return HResultFromWin32(GetLastError);
   try
   {       
      PChar[1] ss;
      ss[0] = PChar(EventText);

      if (!ReportEvent(
            h,         // event log handle
            EventType, // event type
            0,         // category zero
            EventID,   // event identifier
            null,      // no user security identifier
            1,         // one substitution string
            0,         // no data
            @ss,       // pointer to string array
            null       // pointer to data
      ))
      {
         return HResultFromWin32(GetLastError);
      }
   }
   finally
   {
      DeregisterEventSource(h);
   }
   return S_OK;
}

Y ahora puede registrar eventos en el registro de eventos de aplicación:

LogToEventLog("Stackoverflow", "Question 5399066 was answered by Ian Boyd", 
      EVENTLOG_INFORMATION_TYPE, 0x45);

Robar el registro de otra persona

Desafortunadamente, comenzando con Windows Vista, Windows dará quejas feas de que no registró el evento de antemano:

No se puede encontrar la descripción de la ID del evento 69 de Source StackOverflow. O el componente que plantea este evento no está instalado en su computadora local o la instalación está dañada. Puede instalar o reparar el componente en la computadora local.

Si el evento se originó en otra computadora, la información de la pantalla tuvo que guardarse con el evento.

La siguiente información se incluyó con el evento:

Pregunta 5399066 fue respondida por Ian Boyd

Pero tu no tener para vivir con eso. El hecho de que no haya registrado un archivo fuente de mensajes en HKLM, no significa que nadie más lo hizo.

Observe, por ejemplo, un mensaje del panorama fuente en el registro de eventos:

  • Fuente: Outlook
  • Eventid: 0x40000020
  • Datos de eventos: D:\win32app\Exchange\Outlook2003.pst
  • Mensaje: The store D:\win32app\Exchange\Outlook2003.pst has detected a catalog checkpoint.

Puede verificar la información de registro para panorama en:

HKEY_LOCAL_MACHINE SYSTEM CurrentControlset Services EventLog Application Outlook

Y ver:

MessageEventFile: REG_SZ = "D:\Programs\MICROS~4\Office14\1033\MAPIR.DLL"

Si mira los recursos de mapir.dll binary, verá su Tabla de mensajes:

1 MESSAGETABLE
{
0x12,       "Connection stats for server (%1).  Rpcs Attempted (%2), Rpcs Succeeded (%3), Rpcs Failed (%4), Rpcs Canceled (%5), Rpc UI shown (%6), Avg request time (%7) ms, Min request time (%8) ms, Max request time (%9) ms.\r\n"
0x14,       "Cancelable RPC started.\r\n"
0x15,       "Cancelable RPC shutdown.\r\n"
0x40000010,     "Cancelable RPC dialog shown for server (%1), total wait time was (%2) ms, result was (%3).\r\n"
0x40000011,     "User canceled request against server (%1) after waiting (%2) ms.\r\n"
0x40000013,     "Rpc call (%1) on transport (%2) to server (%3) failed with error code (%4) after waiting (%5) ms; eeInfo (%6).\r\n"
0x40000016,     "There was a problem reading one or more of your reminders. Some reminders may not appear.\r\n"
0x40000017,     "Unable to update public free/busy data.\r\n"
0x4000001A,     "%1\r\n"
0x4000001B,     "%1\r\n"
0x4000001D,     "The store %1 is being re-pushed to the indexer for the following reason: %2.\r\n"
0x4000001E,     "Starting reconciliation for the store %1 for the following reason: %2.\r\n"
0x4000001F,     "The store %1 has detected a catalog rebuild.\r\n"
0x40000020,     "The store %1 has detected a catalog checkpoint.\r\n"
...
}

Puede ver que EventID 0x40000020 se asocia con una cadena de formato:

"La tienda %1 ha detectado un punto de control del catálogo. R n"

Puede secuestrar el registro de Outlook:

LogToEventLog("Outlook", "Your mom", EVENTLOG_INFORMATION_TYPE, $40000020);

Y se agregará su evento al registro de eventos sin todas las advertencias feas:

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top