방금 NSIS을 사용하기 시작했습니다.
아주 잘 작동하지만 문서가 약간 구조화되어 있지 않습니다. NSIS과 함께 새 버전을 설치하기 전에 이전 버전을 제거하도록 사용자에게 요청해야합니까?NSIS로 이전 버전을 제거하려면 어떻게해야합니까?
NSIS (Nullsoft Scriptable Install System)은 Windows 설치 프로그램을 만드는 오픈 소스 시스템입니다.
방금 NSIS을 사용하기 시작했습니다.
아주 잘 작동하지만 문서가 약간 구조화되어 있지 않습니다. NSIS과 함께 새 버전을 설치하기 전에 이전 버전을 제거하도록 사용자에게 요청해야합니까?NSIS로 이전 버전을 제거하려면 어떻게해야합니까?
NSIS (Nullsoft Scriptable Install System)은 Windows 설치 프로그램을 만드는 오픈 소스 시스템입니다.
NSIS는 멋진 Windows Installer입니다. NSIS를 사용하여 동일한 애플리케이션의 새 버전을 설치하는 동안 현재 버전을 제거하는 방법은 다음과 같습니다. NSIS 스크립트에 다음 함수를 추가하십시오.
Function .onInit
Exec $INSTDIR\uninst.exe
FunctionEnd
은 또한 당신은 "새를 설치하기 전에 자동 제거 이전"에 NSIS 위키
this 링크를 확인할 수 있습니다.
또 다른 방법은 UninstallPrevious
숨겨진 섹션을 만들고 설치 프로그램의 다른 섹션보다 먼저 실행되도록하는 것입니다. 또한 제거 프로그램이 자동으로 실행되도록하는 것이 좋습니다.
; The "" makes the section hidden.
Section "" SecUninstallPrevious
Call UninstallPrevious
SectionEnd
Function UninstallPrevious
; Check for uninstaller.
ReadRegStr $R0 HKLM "${HKLM_REG_KEY}" "InstallDir"
${If} $R0 == ""
Goto Done
${EndIf}
DetailPrint "Removing previous installation."
; Run the uninstaller silently.
ExecWait '"$R0\Uninstall.exe /S"'
Done:
FunctionEnd
이 방법의 장점은 새 버전을 설치할 준비가 될 때까지 사용자가 이전 버전을 제거하지 않는다는 것입니다. 게다가 그들은 구버전을 언인스톨하는 것에 대한 결정을 내릴 필요조차 없으며 단지 마술처럼 사라집니다.
물론 필요에 따라 사용자가 제거를 확인해야하는 경우 사용자가 spinner_den의 방법을 사용하는 것이 좋습니다.
나중에 설치 제거 프로그램 명령을 결정하기 위해 설치 중에 작성된 UninstallString
또는레지스트리 키를 다시 사용합니다.
몇 상단에 정의 앱이 이미 설치 한 경우 존재 것이다 당신의 .onInit
잡아에서 다음
WriteRegStr HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString" '"$INSTDIR\${PROJECT_UNINSTALL_EXE}" _?=$INSTDIR'
WriteRegStr HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString" '"$INSTDIR\${PROJECT_UNINSTALL_EXE}" /S _?=$INSTDIR'
그리고 레지스트리 키 값을 (: 설치 Section
에서
!define PROJECT_REG_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROJECT_NAME}"
!define PROJECT_UNINSTALL_EXE "uninstall.exe"
방법 :)
${If} ${Silent}
ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString"
${Else}
ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString"
${EndIf}
ExecWait "$R0"
+1 링크 –
$ INSTDIR을 사용하지 마십시오. 레지스트리에서 읽은 값을 사용하여 올바른 값인지 확인하십시오. – utapyngo