f# - 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 中做到这一点?
解决方案
我在这个已关闭的 GitHub 问题上找到了答案:https ://github.com/dotnet/corefx/issues/21767#issuecomment-312328630
原因是默认值UseShellExecute
isfalse
在 .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
)
推荐阅读
- sql - 按部门id排序,列出经理姓名,管理整个部门的经理的部门名称
- flutter - 如何使颤动的视频播放器响应?
- javascript - 我收到错误“无法读取 null 的属性 'title'”
- html - 在屏幕调整大小时将布局从行更改为网格
- python - 如何检查密码是否包含特殊字符和数字?
- r - 为什么我将 NA 作为矩阵乘法输出?
- react-native - 使用 React Native CLI 构建的项目可以使用 expo CLI 运行吗?
- python - 基于多级列过滤行
- c# - 错误 C#:OpenQA.Selenium.ElementNotInteractableException:'元素不可交互
- android - 当您将应用程序置于后台并返回时,OnBackPressedCallback 第一次不起作用