所以我有这个代码:
process = new Process();
process.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;
process.StartInfo.RedirectStandardInput = true;
process.Start();
streamWriter = process.StandardInput;
当我运行该应用程序时,会出现一个 cmd 控制台,但它显示“句柄无效”。如果我尝试使用 streamWriter 写一些东西,我每次尝试都会收到大约四次无效句柄的消息。
开始时正常的文案微软的东西也不见了。
可能是什么问题呢?
如果我尝试使用 Windows Shell,而不是重定向流只是创建一个 cmd 进程,则会出现一个正常的 cmd 控制台,我可以毫无问题地输入它。
编辑:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
process = new Process();
process.StartInfo.FileName = @"C:\windows\system32\cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
process.StartInfo.CreateNoWindow = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
sw = process.StandardInput;
sr = process.StandardOutput;
sw.WriteLine("echo 123");
MessageBox.Show(sr.ReadToEnd());
process.WaitForExit();
}
所以现在弹出一个空白的cmd,我必须手动关闭它,然后我才能从中获取信息,但是我不想丢失这个cmd实例,所以我能做些什么来让它保持“活着”并保持跟它“说话”?
编辑#2 所以“活着”是指我怎样才能做到,所以我不必关闭它来获取我的信息,我必须使用线程吗?因为在我看来 GUI 正在挂起/等待 cmd 关闭:/