だから私はこのコードを持っています:
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を使用して何かを書き込もうとすると、1回の試行で約4回無効なハンドルのメッセージが表示されます。
また、最初の通常のコピーライトMicrosoftのものも欠落しています。
何が問題なのですか?
cmdのプロセスを作成するだけでストリームをリダイレクトせずに、Windowsシェルを使用しようとすると、通常の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のインスタンスを失いたくないので、「生きている」状態を維持するために何ができますか?それに「話しかける」?
Edit#2つまり、「生きている」とは、情報を取得するために閉じる必要がないように、どうすれば作成できるかを意味します。スレッドを使用する必要がありますか?GUIがハングしている/cmdが閉じるのを待っているように見えるからです:/