技术开发 频道

在VC++程序中自定义Vista事件日志



   接下来,要在代码中包含以下头文件:windows.h(如果为控制台程序)、evntprov.h(其包含了所有的Windows事件跟踪)、winevt.h(其包含了所有新的Vista日志声明);另外,可通过调用EventRegister来注册事件发布者:

REGHANDLE hPub = NULL;
EventRegister(
&DOTNETPERFORMANCE_TECHNICALWRITING_PUBLISHER, NULL, NULL, &hPub);
   实际上,引发一个事件非常之简单:创建一个事件描述符并把它传递给EventWrite函数就可以了:

EVENT_DATA_DESCRIPTOR opEventDesc; 
PWSTR pwsOp = L"My Operational Event";
EventDataDescCreate(&opEventDesc, pwsOp,
((ULONG)wcslen(pwsOp)+1)*sizeof(WCHAR));
EventWrite(hPub, &DNP_OP_EVENT, 1, &opEventDesc);
   代码中的宏EventDataDescCreate定义在头文件evntprov.h中,它只是提供了一种更短的语法用于设置变量EVENT_DATA_DESCRIPTOR的成员。

    如果不再需要为特定发布者写入事件,可取消注册:
EventUnregister(hPub)
部署及使用

   在部署程序之前,还需要使用以下命令来注册清单文件:

    wevtutil install-manifest 清单文件名.xml

   Windows Vista自带的wevtutil工具,将会解析清单文件并添加所需的设置到Vista日志记录中;如果未运行wevtutil,事件仍可被成功引发,但在事件日志中将不可见。

   如果一切正常,事件就会如期出现在日志记录中,如下图。



0
相关文章