ping ビルドファイルのいくつかのタスクを実行する c# Windows フォーム アプリケーションがあります。今、私は2つの可能性を持っています:
xml タスクのボタンをクリックすると、cmd ウィンドウが表示され、実行の進行状況が表示され、cmd が閉じます (/k を使用すると、cmd ウィンドウを開いたままにすることができます)。
ボタンをクリックすると、cmd 出力が 1 つの .txt ファイルに保存され、ファイルを読み取って 1 つのテキスト ボックスにコンテンツを表示できます (これは cmd ウィンドウを表示しません)。
ユーザーにメッセージを表示するタスクがいくつかあるため、私が望むのはこの 2 つの組み合わせです。現在、2 番目のオプションを使用すると、空の cmd ウィンドウが開き、ユーザーは質問が何であるかを推測する必要があります。
だから私が本当に欲しいのは、実行が終了するまでcmdウィンドウを表示する方法です(最初のオプションのように)が、同時にcmd出力をファイルに保存して、ファイルの内容をアプリケーションのテキストボックスに入れることができます。
いくつかの英語の間違いをお許しください..
Dour High Archの編集:
textBox1.Clear();
var startInfo = new ProcessStartInfo("phing");
startInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3";
startInfo.Arguments = "commit > log.txt";
Process proc = Process.Start(startInfo);
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.CreateNoWindow =true ;
proc.WaitForExit();
using (StreamReader sr = new StreamReader(@"C:\wamp\bin\php\php5.4.3\log.txt"))
{
textBox1.Text = sr.ReadToEnd();
}
このコードでは、コンソールの出力がテキストボックスに表示されますが、ボタンをクリックしたときに実行されるコミットタスクにはユーザーへの質問が1つあるため、その時が来ると、ユーザーのコミットメッセージを期待する空のコマンドウィンドウが開きますただし、質問は表示されないため、ユーザーは何が期待されるかを推測する必要があります。
その他の試み:
string output = string.Empty;
string error = string.Empty;
string path = @"C:\wamp\bin\php\php5.4.3\";
string ffmpegPath = Path.Combine(path, "phing.bat");
string ffmpegParams = @"commit";
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Windows\System32\cmd.exe");
startInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3\";
startInfo.Arguments = "/k" + ffmpegPath + " " + ffmpegParams;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
Process ffmpeg = new Process();
ffmpeg.StartInfo = startInfo;
ffmpeg.Start();
StreamReader outputReader = ffmpeg.StandardOutput;
textBox1.Text = outputReader.ReadToEnd();
ffmpeg.WaitForExit();
ffmpeg.Close();
この場合、コマンドは開かないので、質問も答えもありません! 設定startInfo.UseShellExecute = true;
すると、「IO ストリームをリダイレクトするには、Process オブジェクトの UseShellExecute プロパティを false に設定する必要があります」という例外が発生します。
私はより多くのことを試しましたが、結果は常に同じです。または、cmdウィンドウを常に開いていますが、コードはテキストボックスに渡されません(これは私が現在使用しているコードです)
string path = @"C:\wamp\bin\php\php5.4.3\";
string ffmpegPath = Path.Combine(path, "phing.bat");
string ffmpegParams = @"update";
Process ffmpeg = new Process();
ffmpeg.StartInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3\";
ffmpeg.StartInfo.FileName = "cmd.exe";
ffmpeg.StartInfo.Arguments = "/k" + ffmpegPath + " " + ffmpegParams;
ffmpeg.Start();
または、出力を 1 つのファイルに保存するか、テキスト ボックスに直接ストリーミングしましたが、質問が表示されません。
誰でもそれを解決する方法を知っていますか?