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

Nsis 如何使用API在Windows事件查看器中创建自定义视图?,nsis,custom-view,event-viewer,Nsis,Custom View,Event Viewer,是否有用于在Windows事件查看器中创建自定义视图的API 我想在使用NSIS的安装中这样做, 但是如果我做不到,还有其他方法,我会为它写一个插件。问题不在于NSIS,而是你需要在系统的某个地方安装一个消息表DLL,并在注册表中注册它。此DLL必须保留在系统上,因为它在查看日志时由事件日志查看器使用,而在记录消息时不使用!对于安装程序来说,这种设计确实有问题 最好只登录到$temp或$exedir中的纯文本文件 如果您真的想使用事件日志,并且不介意黑客攻击,您可以: 将消息表DLL放入$pl

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

我想在使用NSIS的安装中这样做,
但是如果我做不到,还有其他方法,我会为它写一个插件。

问题不在于NSIS,而是你需要在系统的某个地方安装一个消息表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