2011-11-10 2 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 
관련 문제