Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在NSIS的不同目录中卸载以前版本的方法是什么?_Nsis - Fatal编程技术网

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

在NSIS的不同目录中卸载以前版本的方法是什么?,nsis,Nsis,我正在调整NSIS安装程序以更好地处理非默认安装目录,我遇到了一个问题 “我的安装程序”检查现有安装,并通过以下方式调用现有卸载程序(如果有): '"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR' 其中$OLD_INSTDIR是一个变量,我已经从注册表项创建了一个填充变量。这很好,但我一直在测试这样一个场景:有人从现有安装的位置更改安装目录,并注意到卸载程序可执行文件和旧安装目录没有被删除 经过一番挖掘,我了解到,?=$OLD_INSTDIR参数

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

“我的安装程序”检查现有安装,并通过以下方式调用现有卸载程序(如果有):

'"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR'
其中$OLD_INSTDIR是一个变量,我已经从注册表项创建了一个填充变量。这很好,但我一直在测试这样一个场景:有人从现有安装的位置更改安装目录,并注意到卸载程序可执行文件和旧安装目录没有被删除

经过一番挖掘,我了解到,?=$OLD_INSTDIR参数会导致安装程序在其所在位置运行,而不是复制到临时目录。这可以解释为什么不进行删除

我尝试在卸载现有版本后显式删除卸载程序和目录,但这对我也不起作用

ExecWait '$UNINSTALL_OLD_VERSION'
Delete $OLD_INSTDIR/uninstall.exe
RmDir $OLD_INSTDIR
对我应该做什么有什么想法吗?如果这是一件微不足道的事情,我深表歉意,但我对NSIS的熟悉程度仅限于从示例构建安装程序,然后再也不接触它

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

_?=停止通常的复制到%temp%的行为,但也阻止卸载程序删除自身,因此您需要首先使用?参数,然后删除卸载程序

,这就是我正在做的,但它不起作用。“$UNINSTALL\u OLD\u VERSION”只是变量中上面的卸载程序行。但卸载程序将完成其工作吗?如果只是删除失败,我建议您尝试Sysinternal的进程监视器…如:警告:在卸载程序中使用RMDir/r$INSTDIR是不安全的。虽然不太可能,但用户可能已安装到程序文件,此命令将清除整个程序文件文件夹,包括与卸载程序无关的其他程序。用户还可以放置除程序文件之外的其他文件,并希望这些文件随程序一起删除。解决方案仅适用于卸载安装程序在此处安装的文件:@Anders-我的错误-经过数小时的研究和实验,我到处都能看到/r.:-(我应该删除我的评论吗?