使用START / WAIT执行NSIS

问题描述 投票:0回答:3

我正在尝试执行:

ExecWait '"$SYSDIR\cmd.exe" /k "START" /WAIT ""c:\Program Files\MyDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log""'

我在尝试这个时:

ExecWait '"$SYSDIR\cmd.exe" /k "c:\Program Files\MyDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log""',它的工作原理,但我需要关闭命令控制台。

然后我尝试用/ c替换/ k但是ExecWait不等待该命令完成以继续安装。我想要启动的卸载程序不是NSIS安装程序,而是新的instaler。

谢谢您的帮助 !

nsis
3个回答
1
投票

ExecWait总是在等待孩子的过程,但它并不等待孙子孙女。

我不明白为什么你需要使用cmd.exe,它只在重定向stdout时才有用,在这种情况下你不需要start /wait,因为你将执行一个控制台应用程序。

为什么你不能只使用ExecWait '"c:\Program Files\MyDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log"'

/k开关保持控制台打开,/c没有,这是唯一的区别,你仍然需要start /wait部分非控制台应用程序。

Start有愚蠢的报价处理,你可能需要做cmd.exe /c start "" /wait "c:\path\app.exe" "parameters"


0
投票

最后,我正在使用这个似乎有用的命令:

`ExecWait "$SYSDIR\cmd.exe" /c ""c:\Program Files\MydDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log"" & echo. & echo. & pause`

0
投票

这对我有用:使用fileopen / fileclose创建批处理文件并使用nsExec运行它...类似于:

  FileOpen $0 C:\Updates\WindowsFeatures\InstallDotNet3.cmd w
              FileWrite $0 'REM This installs the .net 3.x components'
              FileWrite $0 "$\r$\n" ; we write a new line
              FileWrite $0 'DISM /online /LogLevel:4 /Add-package /PackagePath:C:\Updates\WindowsFeatures\Microsoft-Windows-NetFx3-OnDemand-Package~31bf3856ad364e35~amd64~en-US~.cab /NoRestart /Quiet'
              FileWrite $0 "$\r$\n" ; we write a new line
              FileWrite $0 'DISM /online /LogLevel:4 /Add-package /PackagePath:C:\Updates\WindowsFeatures\microsoft-windows-netfx3-ondemand-package~31bf3856ad364e35~amd64~~.cab /NoRestart /Quiet'
              FileClose $0
              DetailPrint "Installing .net 3.x - Please wait"
              nsExec::ExecToStack 'C:\Updates\WindowsFeatures\InstallDotNet3.cmd'

              Pop $0
              Pop $1
              DetailPrint "More Info $0 $1"
© www.soinside.com 2019 - 2024. All rights reserved.