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