이 작은 nsis 설치 프로그램에서 내부적으로 errorlevel을 설정하고 (설치 스크립트/자동 설치기를 배치 스크립트 내에서 자동 실행 모드로 실행할 때) 외부에서 잡으려고합니다. 그러나 어떻게 든 항상 % errorlevel % = 여기에 0NSIS 자동 설치 제거 SetErrorLevel
는
!addincludedir .\include
!include StrRep.nsh
!include ReplaceInFile.nsh
!include LogicLib.nsh
!include FileFunc.nsh
!insertmacro GetParameters
!insertmacro GetOptions
!define MY_APP_NAME "foo"
Outfile "${MY_APP_NAME}.exe"
InstallDir $DESKTOP
Section
${GetParameters} $R0
ClearErrors
${GetOptions} $R0 /PLACEHOLDER= $0
IfErrors 0 +2
Call ErrorHandler
SetOutPath $INSTDIR
File /r foo_root_folder
!insertmacro _ReplaceInFile "foo_root_folder\subfolder_a\test.properties" "%%placeholder_string%%" "$0"
WriteRegStr HKLM "SOFTWARE\${MY_APP_NAME}" "Install_Dir" "$INSTDIR\foo_root_folder"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "Publisher" "Federico"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "DisplayName" "${MY_APP_NAME}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "DisplayVersion" "1.0"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "UninstallString" '"$INSTDIR\foo_root_folder\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "NoRepair" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}" "EstimatedSize" 1000
WriteUninstaller "foo_root_folder\uninstall.exe"
SectionEnd
Section "Uninstall"
ReadRegStr $0 HKLM "SOFTWARE\${MY_APP_NAME}" "Install_Dir"
${If} ${Errors}
Call un.ErrorHandler
${Else}
${IF} $0 == ""
Call un.ErrorHandler
${ELSE}
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${MY_APP_NAME}"
DeleteRegKey HKLM "SOFTWARE\${MY_APP_NAME}"
RmDir /r /REBOOTOK "$0"
${ENDIF}
${EndIf}
SectionEnd
Function ErrorHandler
SetErrorLevel 1
Quit
FunctionEnd
Function un.ErrorHandler
SetErrorLevel 1
Quit
FunctionEnd
그것에 뭔가 잘못인가 내 NSI 스크립트입니다? "HKLM \ 소프트웨어 \의 $ {MY_APP_NAME}"설치 후, 나는 의도적으로 레지스트리 키를 삭제 : 내가 예를 들어 %의 오류 수준의 % = 1
SetErrorLevel 1
Quit
이 있어야합니다 (오류의 경우) 그 라인을 함께 생각 , 그리고 나서 제거 프로그램을 실행합니다. 키를 찾지 못하고 예상대로 종료되지만 % errorlevel %는 여전히 0입니다.