2016-07-20 9 views
-1

StandardInput.WriteLine(str)を使用して開いているcmd.exeプロセスにコマンドを送信しようとしていますが、コマンドが送信されていないようです。最初に、グローバル変数p(Process p)でプロセスを開きます。cmd.exeプロセスにコマンドを送信できません

p = new Process() 
{ 
    StartInfo = { 
     CreateNoWindow = true, 
     UseShellExecute = false, 
     RedirectStandardError = true, 
     RedirectStandardInput = true, 
     RedirectStandardOutput = true, 
     FileName = @"cmd.exe", 
     Arguments = "/C" //blank arguments 
    } 
}; 

p.Start(); 
p.WaitForExit(); 

その後、結果をテキストボックスに記録する簡単な方法でコマンドを送信しようとします。

private void runcmd(string command) 
{ 
    p.StandardInput.WriteLine(command); 
    var output = p.StandardOutput.ReadToEnd(); 
    TextBox1.Text = output; 
} 

今私はDIRでそれをテストしていますが、var outputはありません出力になり、ヌル、として表示されます。開いているcmd.exeプロセスにコマンドを送信するより良い方法はありますか?

+0

* p.WaitForExit()の前に 'p.StandardOutput.ReadToEnd()' *を呼び出す必要があります。そうしないと、デッドロックが発生します。 [ここ](https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput(v = vs.110).aspx)を参照してください。あなたはデッドロックは言及していませんでしたが、これはあなたの問題かもしれません。 – Quantic

+0

p.WaitForExit()を削除しようとしましたが、引き続き問題が発生しました。 – FyreeW

+0

'Cmd/c'が起動し、CMDを終了します。 –

答えて

1

stdoutを同期させずに同期読み取りを行うことはできませんが、stdout/stderrの非同期読み取りでは機能します。 /cを渡す必要はありません。コマンドを渡すときには、の引数を渡すだけです。あなたはこれをやっていない、あなたは入力に直接コマンドを送信している。

var p = new Process() 
{ 
    StartInfo = { 
    CreateNoWindow = false, 
    UseShellExecute = false, 
    RedirectStandardError = true, 
    RedirectStandardInput = true, 
    RedirectStandardOutput = true, 
    FileName = @"cmd.exe"} 
}; 
p.OutputDataReceived += (sender, args1) => Console.WriteLine(args1.Data); 
p.ErrorDataReceived += (sender, args1) => Console.WriteLine(args1.Data); 
p.Start(); 
p.BeginOutputReadLine(); 
p.StandardInput.WriteLine("dir"); 
p.StandardInput.WriteLine("cd e:"); 
p.WaitForExit(); 

Console.WriteLine("Done"); 
+0

まだ何もありません。また、私は複数のコマンドのプロセスを開いたままにする必要があるので、私はそれを閉じることはできません。 – FyreeW

+0

@FyreeW stdoutを同期して読み出すことで、何を試してもstdinを閉じるだけで動作するようになりました。しかし、すべてはstdoutの非同期読み込みでうまくいくように見えます。私は非同期バージョンで自分の答えを編集しました。 – Quantic

+0

cmdシェルのポップアップが表示されますが、出力はありません。 – FyreeW

関連する問題