如何使用API​​在Windows事件查看器中创建自定义视图?

时间:2011-11-10 10:26:03

标签: nsis custom-view event-viewer

是否有用于在Windows事件查看器中创建自定义视图的API?

我想在使用NSIS的安装中这样做, 但是,如果我不能,还有其他任何方式,那么我会为它编写一个插件。

1 个答案:

答案 0 :(得分:0)

问题不是NSIS而是the way the Event Log works,您需要在系统的某处安装消息表DLL并在注册表中注册它。此DLL必须保留在系统上,因为当您查看日志时,事件日志查看器会使用此DLL,并且在您记录消息时不会使用此DLL!对于安装人员来说,这种设计确实存在问题。

最好只记录$ temp或$ exedir中的纯文本文件。

如果你真的想使用事件日志而你不介意黑客攻击:

  • 将消息表DLL放在$ pluginsdir中,并在安装程序启动/结束时注册/取消注册(如果崩溃则将垃圾留在注册表中!)
  • 使用Microsoft / Windows消息表(它们没有记录,可能会从版本更改为版本(和Service Pack?),因此您必须测试您支持的每个Windows版本和配置!)

NSIS代码如下所示:

section

System::Call 'advapi32::RegisterEventSource(i0,t "Software Installation")i.r0'
#TODO: Check if $0 == 0 and display error message
System::Call '*(i,&t1000 "Hello world")i.r1'
IntOp $2 $1 + 4
System::Call '*$1(ir2)'
System::Call 'advapi32::ReportEvent(ir0,i ${EVENTLOG_ERROR_TYPE},i0,i 101,i0,i1,i0,ir1,i0)i'
System::Free $1
System::Call 'advapi32::DeregisterEventSource(ir0)'

sectionend