1

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

我想在使用 NSIS 的安装中做到这一点,但如果我不能并且还有其他方法,那么我将为它编写一个插件。

4

1 回答 1

0

问题不在于 NSIS,而是事件日志的工作方式,您需要在系统某处安装消息表 DLL 并将其注册到注册表中。此 DLL 必须保留在系统上,因为它在您查看日志时由事件日志查看器使用,而在您记录消息时不使用!这种设计对于安装人员来说确实是个问题。

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

如果您真的想使用事件日志并且不介意黑客攻击,您可以:

  • 将消息表 DLL 放入 $pluginsdir 并在安装程序启动/结束时注册/取消注册(如果它崩溃,您会在注册表中留下垃圾!)
  • 使用 Microsoft/Windows 消息表(它们没有记录,可能会随着版本的变化(和服务包?)所以你必须测试你支持的每个 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
于 2011-11-13T10:47:10.720 回答