【发布时间】:2017-03-07 10:09:15
【问题描述】:
我在下面编写此代码以在我的程序中运行 .exe 文件,它的工作正常,只是进程永远不会结束,因此程序不会在 proc.WaitForExit(); 行之后继续。我试图阅读StandartInput,但没有任何改变。可能是什么原因?
我的代码:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.WorkingDirectory = @"D:\";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardInput = true;
proc.Start();
proc.StandardInput.WriteLine("cd " + directory);
proc.StandardInput.WriteLine(exeFile + arguments);
proc.WaitForExit();`
注意:如果我在 windows 中通过 cmd 运行 exe 文件,它的效果很好。
谢谢。
【问题讨论】:
-
尝试使用
WaitForExit(int milliseconds)方法重载,即prod.WaitForExit(1000); -
另外,检查this question
-
我不喜欢使用
WaitForExit(int miliseconds),因为我不知道这个过程需要多长时间,这可能会导致一些问题/工作缓慢。 -
你基本上打开
cmd而不关闭它,使用proc.WaitForExit()你只需等到用户关闭cmd。注意proc.StartInfo.CreateNoWindow = true;只是没有打开控制台而是运行了一个cmd进程,所以需要显式停止该进程。 -
但是我怎么知道什么时候关闭窗口呢?我尝试使用
StandardOutput.ReadToEnd()但这没有帮助 - 可能是因为 exe 文件不写任何输出/