【问题标题】:How to launch a program but not wait for it to exit in msbuild [duplicate]如何启动程序但不等待它在msbuild中退出[重复]
【发布时间】:2011-05-24 16:01:26
【问题描述】:

可能重复:
MSBuild exec task without blocking

在 MSBuild 中,我需要启动一个进程 (vsperfcmd),但不要等待它完成,因为它会无限期地阻塞,直到从其他地方调用关闭命令。我目前正在使用exec 任务启动它:

<exec command="vsperfcmd /start:coverage /output:test.coverage" />

我尝试使用“开始”,但遇到同样的阻塞问题

<exec command="start vsperfcmd /start:coverage /output:test.coverage" />

奇怪的是,如果在命令行输入相同的命令并不会阻塞。

【问题讨论】:

    标签: visual-studio-2010 msbuild code-coverage


    【解决方案1】:

    也许您可以尝试将命令放入 DOS 批处理文件并调用该批处理文件。不是很优雅,但可能会奏效。如果这不起作用,则调用一个批处理文件,该批处理文件调用另一个来完成工作。例如

    mycommand1.bat:

    mycommand2.bat
    

    mycommand2.bat:

    vsperfcmd /start:coverage /output:test.coverage
    

    mycommand1 在继续之前不会等待 mycommand2 完成(除非您使用了 CALL mycommand2)。

    【讨论】:

    • 遗憾的是这不起作用,即使有两层批处理文件。
    • 您也可以尝试使用 c#(或您首选的 .NET 语言)创建自定义构建任务 (LaunchWithoutWait),该任务无需等待即可运行。
    • 是的,这是我的下一个计划
    【解决方案2】:

    在你的 exec 任务中尝试这样的事情,它运行 explorer 然后立即返回,

    <Target Name="Build">
      <Message Text="Before" />
      <Exec Command="start $(COMSPEC) /k &quot;$(WINDIR)\explorer.exe &amp; exit&quot;" />
      <Message Text="After" />
    </Target>
    

    由于您正在执行的命令有参数,您可能需要尝试将该命令正确地括在引号中。看一下“help cmd”/S 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多