2011-11-10 8 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 
関連する問題