2

我有以下代码:

let p = new System.Diagnostics.Process();
printfn "installing %A" "installing"
p.StartInfo.FileName <- "powershell.exe";
p.StartInfo.Arguments <- ("/c notepad.exe")
p.StartInfo.RedirectStandardOutput <- true
p.StartInfo.UseShellExecute <- false
p.Start() 
printfn "result ?"
printfn "result %A" (p.StandardOutput.ReadToEnd())
printfn "done"

奇怪的是,它在打印结果之前等待我在 FSI 窗口中按 Enter 键。

这可能是一件小事,但我怎样才能消除这种行为?

我在 MSDN 上找不到这个。

4

1 回答 1

1

在 VS 中的 F# Interactive 中(突出显示代码并按 Alt+Enter)或使用“fsi Script.fsx”(Visual Studio 2013 / .NET 4.5.1)从 shell 运行它时,我都看不到这种行为。

我确实必须在开关中添加“-executionpolicy remotesigned”以避免异常(即使在普通的 PS shell 中,这已经设置),但如果您没有 PowerShell 配置文件,这可能不会发生在您身上。

我看到的是:

(Notepad opens)
installing "installing"
result ?
(I close notepad)
result ""
done

我正在运行以下代码fsi Script.fsx。我在 PowerShell 窗口和普通的 CMD 提示符下都试过了。

let p = new System.Diagnostics.Process();
printfn "installing %A" "installing"
p.StartInfo.FileName <- "powershell.exe";
p.StartInfo.Arguments <- ("-executionpolicy remotesigned /c notepad.exe")
p.StartInfo.RedirectStandardOutput <- true
p.StartInfo.UseShellExecute <- false
p.Start() 
printfn "result ?"
printfn "result %A" (p.StandardOutput.ReadToEnd())
printfn "done"
于 2013-10-27T14:43:30.457 回答