1

だから私はこのコードを持っています:

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が閉じるのを待っているように見えるからです:/

4

1 に答える 1

2

WPFアプリケーションにはコンソールウィンドウがありません。必要な場合は作成する必要があります。

これに関する既存のスレッドは以下のとおりです。

Windowsアプリケーションからコンソールウィンドウに書き込む方法は?

于 2012-11-26T23:18:48.367 に答える