FAKE - 在新 window 中开始进程
FAKE - Start process in new window
我正在尝试通过 FAKE 脚本在新控制台 window 中启动应用程序。
在普通的 .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 中,我尝试了同样的事情,但这会启动一个新的后台进程并输出到控制台 window,我在其中 运行 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 中做到这一点?
我在这个已关闭的 GitHub 问题中找到了答案:https://github.com/dotnet/corefx/issues/21767#issuecomment-312328630
原因是 UseShellExecute
在 .NET Framework 中的默认值是 false
,但在 .NET Core 中是 true
。 CAKE 在 Framework 中,FAKE 5 在 Core 中。
解决方案:
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
)
我正在尝试通过 FAKE 脚本在新控制台 window 中启动应用程序。
在普通的 .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 中,我尝试了同样的事情,但这会启动一个新的后台进程并输出到控制台 window,我在其中 运行 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 中做到这一点?
我在这个已关闭的 GitHub 问题中找到了答案:https://github.com/dotnet/corefx/issues/21767#issuecomment-312328630
原因是 UseShellExecute
在 .NET Framework 中的默认值是 false
,但在 .NET Core 中是 true
。 CAKE 在 Framework 中,FAKE 5 在 Core 中。
解决方案:
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
)