在NSIS中卸载以前版本在不同目录中的方法是什么?

时间:2011-02-21 21:24:21

标签: nsis

我正在调整NSIS安装程序以更好地处理非默认安装目录,而且我遇到了问题。

我的安装程序检查现有安装并调用现有的卸载程序,如果有一个通过:

'"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR'

其中$ OLD_INSTDIR是一个Var我创建了一个从注册表项填充的。这工作正常,但我一直在测试有人更改现有安装所在的安装目录的情况,并注意到卸载程序可执行文件和旧安装目录未被删除。

经过一番挖掘后,我明白_?= $ OLD_INSTDIR参数会导致安装程序在原来的位置运行,而不是被复制到临时目录。这可以解释为什么不发生删除。

我已经尝试在卸载现有版本后明确删除卸载程序和目录,但这对我来说也不起作用。

ExecWait '$UNINSTALL_OLD_VERSION'
Delete $OLD_INSTDIR/uninstall.exe
RmDir $OLD_INSTDIR

关于我应该做什么的任何想法?抱歉,如果这是微不足道的,但我对NSIS的熟悉程度几乎仅限于从示例构建安装程序,然后再也不会再触摸它。

1 个答案:

答案 0 :(得分:0)

ExecWait '"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR'
Delete "$OLD_INSTDIR\uninstall.exe"
RmDir "$OLD_INSTDIR"

_?=停止通常的复制到%temp%行为,但也阻止卸载程序自行删除,所以你需要先用_运行?参数然后删除卸载程序

相关问题