我是C#的新手,试图开发一个内部打开命令提示符并在这里执行一些命令的小应用程序.这是我到目前为止所做的
m_command = new Process(); m_command.StartInfo.FileName = @"cmd.exe"; m_command.StartInfo.UseShellExecute = false; m_command.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; m_command.StartInfo.CreateNoWindow = true; m_command.StartInfo.RedirectStandardInput = true; m_command.StartInfo.RedirectStandardOutput = true; m_command.Start(); m_reader = m_command.StandardOutput; m_writer = m_command.StandardInput; m_writer.WriteLine("Somecommand"); //execute some command
如您所见,我已经重定向了输入和输出.我的问题是如何同步执行“一些命令”,即我想使用重定向输出读取我的命令的结果.为此,我必须等到我使用WriteLine调用的命令完成.我怎么做?
解决方法
这真的取决于命令将做什么.您可以等待进程退出Process.WaitForExit,同时从另一个线程中的m_reader或OutputDataReceived读取.这只有在命令完成后进程退出时才有效. (请注意,您必须读取输出,否则可能会填满输出缓冲区,并基本阻止该过程.)
另一个选项是如果您在命令完成时得到一定的输出位,例如下一个命令提示符.麻烦的是,如果你的命令碰巧输出相同的事情,你会错了.
感觉像启动一个命令提示符,因为这不是一个伟大的方法.任何理由你不会每次都创建一个单独的过程?
另一个选择:如果您可以通过命令行了解刚刚启动的进程,则可以将其作为进程找到并等待退出.这很棘手 – 我真的会尝试重新设计您的解决方案.