2

我正在为我工​​作的公司内部使用的其中一个应用程序编写 NSIS 安装程序,安装过程运行良好,创建了所有 REG 密钥没有问题,应用程序使用的文件夹和服务也是如此. 出于某种我无法理解的原因,卸载过程不起作用。

应用程序创建的服务被删除,注册表项也被删除,最简单的部分,文件本身,我无法通过卸载程序删除它们!

#Includes
!include "x64.nsh"
#Defines and Installer Properties
Outfile "ESTvnc Installer.exe"
Name ESTvnc 
Icon "${NSISDIR}\contrib\graphics\icons\VNCON.ico"
#Detect OS Version
Function .onInit
    StrCpy $instdir $PROGRAMFILES
    ${If} ${RunningX64}
        StrCpy $instdir $PROGRAMFILES32
    ${EndIf}
FunctionEnd

section
    SetShellVarContext all  
    CreateDirectory $instdir\EST\ESTvnc
    setOutPath $instdir\EST\ESTvnc
    File /r installfiles\*
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ESTvnc\" \
                 "DisplayName" "ESTvnc"
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ESTvnc"\
                 "UninstallString" "$instdir\EST\ESTvnc\uninstaller.exe"
    writeUninstaller $instdir\EST\ESTvnc\uninstaller.exe
    ExecWait '"$instdir\EST\estvnc\estvnc.exe" -install'
sectionEnd

section "Uninstall"
    SetShellVarContext all  
    SimpleSC::StopService "ESTVNC" 1 30
    pop $0
    SimpleSC::StopService "ESTVNCSR" 1 30
    pop $0
    SimpleSC::RemoveService "ESTVNC"
    SimpleSC::RemoveService "ESTVNCSR"    
    RMDir /r "$instdir\EST\ESTvnc"  
    Delete $instdir\EST\ESTvnc\uninstaller.exe  
    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ESTvnc"  
sectionEnd
4

1 回答 1

5

在卸载程序中,$instdir是卸载程序所在的目录!

将卸载程序放入$instdir并删除$instdir\EST\ESTvnc,或者如果您想保留它$instdir\EST\ESTvnc,请删除$instdir...

于 2013-03-05T17:57:05.627 回答