execwait 不起作用后删除命令

问题描述

我正在创建一个安装程序。我的应用程序需要 VC++2013 运行时。所以我正在检查,如果没有找到 VC++ 运行时,我将从我的安装程序中安装它。 为此,我将 VC++ 运行时 exe 复制到 programfiles/myapplication 并使用

运行它
ExecWait '"$INSTDIR\vc.exe" /passive /norestart' $0
Delete "$INSTDIR\vc.exe"

但问题是 vc.exe 没有被删除。它保留在 programfiles/myapplication 文件夹中。

我使用 IfErrors 命令并发现发生错误。 请建议我如何解决这个问题

解决方法

ExecWait 总是 等待子进程结束,但仅仅因为进程结束并不意味着您可以删除 .EXE 文件。理想情况下,它应该意味着,但在某些情况下,资源管理器或反病毒软件会将文件锁定几秒钟。如果没有更多信息,很难说为什么不能删除,Process Monitor 可能会提供一些线索。

你可以试试

ExecWait '"$INSTDIR\vc.exe" /passive /norestart' $0
Sleep 2500
Delete "$INSTDIR\vc.exe"

但由于您无论如何都会删除它,我建议将其提取到 NSIS 会尝试为您清理的其他地方:

Section
InitPluginsDir
File "/oname=$PLUGINSDIR\vc.exe" "c:\myredistfiles\vc.exe"
ExecWait '"$PLUGINSDIR\vc.exe" /passive /norestart' $0
SectionEnd