【问题标题】:Starting a program with MSBuild/Web Deployment Project and not waiting for it使用 MSBuild/Web 部署项目启动程序而不是等待它
【发布时间】:2009-08-07 17:27:15
【问题描述】:

部署完成后,我希望资源管理器在某个文件夹上打开,我正在使用以下内容进行尝试:

<Target Name="AfterBuild">
  <Exec Command="..."></Exec>
</Target>

但是,一个简单的“explorer \somewhere”会导致构建过程阻塞在资源管理器上,并且在您关闭资源管理器之前它不会完成。使用 start explorer \\somewhere 前缀也不会改变这一点。

有没有简单的方法来做到这一点?问题是我们只部署到中间阶段,并且希望手动完成最后一步,并且在相关文件夹上打开资源管理器是一个不错的选择。如果重要的话,Exec 命令实际上调​​用了一个 BAT 文件,在 Server 2008 Standard 上使用 VS.NET 2008。

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    我最终做的是有一个

    <Exec Command="..." Timeout="2000"></Exec>
    

    也就是说,从一个不同的 Exec 元素启动 Explorer,然后是 copy-element,然后在这个元素上添加一个稍微短的超时。这意味着 VS 启动资源管理器,并在 2 秒后返回。

    【讨论】:

    • 如果您不希望它在超时后出错,您还应该设置 ContinueOnError="true"。
    • 如果未在超时内完成,这将终止进程
    【解决方案2】:

    我最终做的是为预构建事件启动一个 powershell 进程。它在不阻塞其余构建过程的情况下执行命令。

    powershell start-process -workingdirectory "..." "cmd " """/k ..."""
    

    【讨论】:

      【解决方案3】:

      在 DOS shell 中,您可以使用 cmd /c 调用另一个进程,而不是等待它返回。您这可以作为构建后事件正常工作。

      <Target Name="AfterBuild">
        <Exec Command="cmd /c start explorer"></Exec>
      </Target>
      

      【讨论】:

      • 好吧,试过CMD /C,看起来没什么区别。启动 cscript 并使用 WScript.shell 的“运行”也是不行的。
      • 抱歉,没有注意到您的回复 CptSkippy。无论如何,它会运行,但不会返回。 IE、VS 被等待的资源管理器窗口阻止。
      • @MyItchyChin 实际上我在谈论 Svend 的第一条评论:这似乎不起作用,尽管它看起来应该起作用。我当然无法让它工作!
      • @Kazark 只是一个温馨的提示;最好尝试询问一个不起作用的答案......轻轻一点。通常会有一些可以修复的小错误,或者一些小的误解等。答案不一定需要删除。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多