NSIS使用IfSIlent跳转执行命令行命令

时间:2017-06-12 01:13:02

标签: installer nsis uninstall silent silent-installer

我正在尝试通过第二次运行安装程序来静默卸载安装程序。在函数un.onInit下使用SetSilent适用于手动单击可执行文件时,但在通过命令行静默运行时无效。我相信它可以运行多个线程(安装程序与卸载程序可执行文件一起运行)所以为了纠正这个问题,我想使用IfSilent跳转并在安装程序静默运行时运行命令行命令。这就是我所拥有的。

IfSilent 0 +2

Exec '"$INSTDIR\uninstall.exe" /S'

我已经在包含文件的主要部分嵌套了这个。我已经检查过,看起来上面的命令似乎没有被执行。上面的exec命令是否正确使用?

更新:我已经添加了我尝试创建的安装程序中的一些代码。我想要做的是我想检查系统以查看应用程序是否存在于目标机器上的某个位置。如果是的话我想卸载以前的版本。

#Installer Functions
Function .onInit

    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" "UninstallString"
    StrCmp $R0 "" done

    ;Run the uninstaller
    ClearErrors
    ExecWait '"$R0" /S _?=$INSTDIR'
    IfErrors no_remove_uninstaller done
    no_remove_uninstaller:
    done:
        InitPluginsDir
FunctionEnd

现在这是我的问题。如果我正常安装,这是有效的。但是,当我尝试以静默方式安装时,卸载程序不会执行。

请注意,我使用$ R0是因为我想处理用户可以选择与安装目录不同的目录的场景。我也试过使用INSTDIR,但它还没有工作

1 个答案:

答案 0 :(得分:0)

您需要使用特殊参数运行卸载程序:

ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'
Delete "$INSTDIR\uninstaller.exe"