首页 > 解决方案 > FAKE - 在新窗口中启动进程

问题描述

我正在尝试从 FAKE 脚本在新的控制台窗口中启动应用程序。

在普通的 .NET 代码中,该方法System.Diagnostics.Process.Start可用于执行此操作。

我过去也用 CAKE 做过这个,像这样:

Task("run-myapp")
  .Does(() => {
    var info = new ProcessStartInfo {
      FileName = "dotnet",
      Arguments = "run myapp.fsproj",
      WorkingDirectory = "C:\\path\\to\\my\\app\\"
    };
    Process.Start(info);
  });

在 FAKE 中,我尝试过同样的事情,但这会启动一个新的后台进程并输出到我运行 FAKE 的控制台窗口。然后我稍后需要使用任务管理器来终止该进程。

Target.create "run-myapp" (fun _ ->
  let psi = ProcessStartInfo()
  psi.FileName <- "dotnet"
  psi.Arguments <- "run myapp.fsproj"
  psi.WorkingDirectory <- "C:\\path\\to\\my\\app\\"
  Process.Start psi |> ignore
)

我也尝试过显式设置ProcessStartInfo.CreateNoWindow <- false(虽然false是默认设置),但这并没有改变任何东西。

有没有办法在 FAKE 中做到这一点?

标签: f#f#-fakef#-fake-5

解决方案


我在这个已关闭的 GitHub 问题上找到了答案:https ://github.com/dotnet/corefx/issues/21767#issuecomment-312328630

原因是默认值UseShellExecuteisfalse在 .NET Framework 中,但true在 .NET Core 中。CAKE 在框架中,而 FAKE 5 在核心中。

解决方案:

Target.create "run-myapp" (fun _ ->
  let psi = ProcessStartInfo()
  psi.FileName <- "dotnet"
  psi.Arguments <- "run myapp.fsproj"
  psi.WorkingDirectory <- "C:\\path\\to\\my\\app\\"
  psi.UseShellExecute <- true
  Process.Start psi |> ignore
)

推荐阅读