【发布时间】:2011-12-27 18:36:51
【问题描述】:
在另一个问题中解释了一些问题后,我继续编写了一个模拟 Windows 命令提示符的应用程序。每个命令都由一个 Process 对象执行,该对象调用“CMD.exe /C [command]”并将其标准输出/错误重定向到 Winform。
它运行良好,但是当我执行某些命令时表单崩溃,例如要求一些用户交互的“时间”或“wmic”(RedirectStandardInput 为 TRUE)。如何解决此问题,使光标等待输入(如经典提示)?
这是代码
Process cmdProcess = new Process();
cmdProcess.StartInfo.FileName = "CMD.exe";
cmdProcess.StartInfo.Arguments = "/C " + command;
cmdProcess.StartInfo.WorkingDirectory = this.workingDir;
cmdProcess.StartInfo.CreateNoWindow = true;
cmdProcess.StartInfo.UseShellExecute = false;
cmdProcess.StartInfo.RedirectStandardOutput = true;
cmdProcess.StartInfo.StandardOutputEncoding = Encoding.Default;
cmdProcess.StartInfo.RedirectStandardError = true;
cmdProcess.StartInfo.StandardErrorEncoding = Encoding.Default;
//cmdProcess.StartInfo.RedirectStandardInput = true;
cmdProcess.Start();
StreamReader outputR = cmdProcess.StandardOutput;
StreamReader errorR = cmdProcess.StandardError;
//StreamWriter inputW = cmdProcess.StandardInput;
string output = outputR.ReadToEnd();
string error = errorR.ReadToEnd();
if (output.Length > 0)
this.textArea.AppendText(Environment.NewLine + output);
else if (error.Length > 0)
this.textArea.AppendErrorText(Environment.NewLine + error);
我评论了所有启用输入重定向的部分,现在,例如“time”命令的输出不会询问任何用户输入并立即返回。显然我不喜欢这种行为;)
C:\Users\Alessandro\Progetti\CMDProject\CMDProject\bin\Debug>time
Ora corrente: 19:32:17,55
Immettere nuova ora:
C:\Users\Alessandro\Progetti\CMDProject\CMDProject\bin\Debug>
【问题讨论】:
-
当您调用 /wmic 时,您要执行此同步还是异步。?查看此链接,它还有其他关于如何正确使用 System.Diagnostics.Process 来完成您可能尝试做的事情的参考资料。stackoverflow.com/questions/7502894/…