我正在尝试执行:
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。
感谢您的帮助!
答案 0 :(得分: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"
答案 1 :(得分:0)
最后,我使用这个似乎有用的命令:
`ExecWait "$SYSDIR\cmd.exe" /c ""c:\Program Files\MydDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log"" & echo. & echo. & pause`
答案 2 :(得分: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"