0

ping ビルドファイルのいくつかのタスクを実行する c# Windows フォーム アプリケーションがあります。今、私は2つの可能性を持っています:

  1. xml タスクのボタンをクリックすると、cmd ウィンドウが表示され、実行の進行状況が表示され、cmd が閉じます (/k を使用すると、cmd ウィンドウを開いたままにすることができます)。

  2. ボタンをクリックすると、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 つのファイルに保存するか、テキスト ボックスに直接ストリーミングしましたが、質問が表示されません。

誰でもそれを解決する方法を知っていますか?

4

1 に答える 1

0

最初のオプションを使用し、出力をファイルにリダイレクトして cmd 出力をキャプチャします。

完全な例をここに示します

于 2013-09-18T11:21:33.840 に答える