.NET:如何在EventLog Entry中设置用户信息?

Kev*_*ead 4 .net c# vb.net event-log

System.Diagnostics.EventLog类提供了与Windows事件日志交互的方法.我一直用它来进行简单的记录......

System.Diagnostics.EventLog.WriteEntry("MyEventSource", "My Special Message")
Run Code Online (Sandbox Code Playgroud)

有没有办法使用.NET在生成的事件日志条目中设置用户信息?

Joh*_*ret 5

Toughie ......

我找了一种用.NET方法填充用户字段的方法.不幸的是,没有,你必须导入普通老式的Win32 API [ReportEvent功能(http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx)DLLImportAttribute

您还必须重新声明函数用正确的类型,平台调用数据类型

所以

BOOL ReportEvent(
__in  HANDLE hEventLog,
__in  WORD wType,
__in  WORD wCategory,
__in  DWORD dwEventID,
__in  PSID lpUserSid,
__in  WORD wNumStrings,
__in  DWORD dwDataSize,
__in  LPCTSTR *lpStrings,
__in  LPVOID lpRawData
);
Run Code Online (Sandbox Code Playgroud)

[DllImport("Advapi32.dll", EntryPoint="ReportEventW",  SetLastError=true,
CharSet=CharSet.Unicode)]
bool WriteEvent(
  IntPtr hEventLog, //Where to find it ?
  ushort  wType,
  ushort  wCategory,
  ulong dwEventID,
  IntPtr lpUserSid, // We'll leave this struct alone, so just feed it a pointer
  ushort wNumStrings,
  ushort dwDataSize,
  string[] lpStrings,
  IntPtr lpRawData
);
Run Code Online (Sandbox Code Playgroud)

您还想查看[OpenEventLog](http://msdn.microsoft.com/en-us/library/aa363672 (VS.85) .aspx)和[ConvertStringSidToSid](http://msdn.microsoft.com/ EN-US /库/ aa376402(VS.85)的.aspx)

哦,你现在正在编写非托管代码...注意内存泄漏.祝你好运:p