2011-11-10 51 views

回答

0

問題不是NSIS,而是the way the Event Log works,您需要在系統某處安裝消息表DLL,並將其註冊到註冊表中。此DLL必須保留在系統上,因爲它在查看日誌時被事件日誌查看器使用,並且在您記錄消息時不會使用!這種設計對於安裝者來說確實是個問題。

只需登錄到$ temp或$ exedir中的純文本文件可能會更好。

如果你真的想使用事件日誌,你不介意黑客你可以:

  • 放入$ PLUGINSDIR消息表DLL當安裝程序開始/結束註冊/註銷(如果它崩潰你在註冊表中留下垃圾!)
  • 使用Microsoft/Windows消息表(它們沒有記錄,可能會從版本更改爲版本(和服務包?),所以你將不得不測試每個Windows版本和你支持的配置!)

NSIS co de看起來像這樣:

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 
相關問題