【问题标题】:ExecWait NSIS with START /WAIT使用 START /WAIT 执行 NSIS
【发布时间】:2017-11-13 21:14:15
【问题描述】:

我正在尝试执行:

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""' , 它可以工作,但我需要关闭命令控制台。

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

感谢您的帮助!

【问题讨论】:

    标签: nsis


    【解决方案1】:

    这对我有用: 使用 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"
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        ExecWait 总是等待子进程,但不等待孙子进程。

        我不明白您为什么需要使用 cmd.exe,它仅在您重定向标准输出时才有用,在这种情况下您不需要 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 '"c:\Program Files\MyDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log"',因为 nsis 忽略了它。
        • 我要试试你的解决方案。
        • cmd.exe /c start "" /wait "c:\path\app.exe" "parameters" 的作用与ExecWait '"$SYSDIR\cmd.exe" /c "c:\Program Files\MyDir\Uninstall.exe" -l "c:\Program Files\MyDir\Uninstall.log""' 相同
        • No NSIS 不会忽略任何内容,如果它不起作用,那么路径可能有问题? 64 位程序文件?
        • 是64位的程序文件,但我认为路径没有问题,因为如果我在cmd控制台执行没有问题。也许我需要管理员权限才能执行它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 2016-12-05
        相关资源
        最近更新 更多