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



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

IfSilent 0 +2

Exec '"$INSTDIRuninstall.exe" /S'

我已将其与包含的文件嵌套在主部分中。我已经检查过,似乎没有执行上述命令。是否正确使用了上述exec命令?

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

#Installer Functions
Function .onInit
ReadRegStr $R0 HKLM "SOFTWAREMicrosoftWindowsCurrentVersionUninstall$(^Name)" "UninstallString"
StrCmp $R0 "" done
;Run the uninstaller
ClearErrors
ExecWait '"$R0" /S _?=$INSTDIR'
IfErrors no_remove_uninstaller done
no_remove_uninstaller:
done:
InitPluginsDir
FunctionEnd

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

请注意,我使用 $R 0 是因为我想处理用户可能选择不同目录而不是安装目录的情况。 我也尝试过使用INSTDIR,但它仍然不起作用

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

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

最新更新