NSIS卸载程序无法正常工作

时间:2014-05-12 13:23:02

标签: nsis

我正在使用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) 任何帮助/想法将受到高度赞赏。

1 个答案:

答案 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