我正在使用NSIS安装程序脚本为我的应用程序开发安装程序,我面临的问题是,如果我在不同的文件夹中安装相同的应用程序,并且我正在使用该文件夹中的uninstall.exe我先安装的地方,它会安装最后一次安装,实际上两个uninstall.exe都会指向上次安装的位置。
这就是我制作卸载密钥的方式:
' ; Write the uninstall keys for Windows
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANY}${APPNAME}" "DisplayName" "${APPNAME} (Remove only)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANY} ${APPNAME}" "UninstallString" '"$INSTDIR\uninstall.exe"''
所需的行为是每个“uninstall.exe”应该指向它所属的安装文件夹。我知道有一个类似的问题,但对我没有任何帮助。 (nsis uninstall problem) 任何帮助/想法将受到高度赞赏。
答案 0 :(得分:0)
如果要允许多次安装,则每次安装都必须使用唯一的卸载密钥名称:
...
Page Directory
Page InstFiles
!include LogicLib.nsh
Section
SetOutPath $InstDir
System::Call 'OLE32::CoCreateGuid(g.r1)' ; Generate a new GUID for this install
WriteUninstaller "$InstDir\Uninst.exe"
FileOpen $0 "$InstDir\Uninst.exe" a
${If} $0 <> 0
FileSeek $0 0 END
FileWrite $0 $1 ; Save the GUID in the uninstaller
FileClose $0
${EndIf}
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_$1" "DisplayName" "${APPNAME} (Remove only)"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_$1" "UninstallString" '"$InstDir\Uninst.exe"'
File "MyApp.exe"
SectionEnd
Section Uninstall
FileOpen $0 "$ExePath" r
${If} $0 <> 0
FileSeek $0 -38 END
FileRead $0 $1 38
FileClose $0
${If} $1 != ""
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_$1"
${EndIf}
${EndIf}
Delete "$InstDir\Uninst.exe"
Delete "$InstDir\MyApp.exe"
RMDir $InstDir
SectionEnd