我正在创建一个安装程序。我的应用程序需要 VC++2013 运行时。所以我正在检查,如果没有找到 VC++ 运行时,我将从我的安装程序中安装它。 为此,我将 VC++ 运行时 exe 复制到 programfiles/myapplication 并使用
运行它ExecWait '"$INSTDIR\vc.exe" /passive /norestart' $0
Delete "$INSTDIR\vc.exe"
但问题是 vc.exe 没有被删除。它保留在 programfiles/myapplication 文件夹中。
我使用 IfErrors
命令并发现发生错误。
请建议我如何解决这个问题
答案 0 :(得分:0)
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