1

System.Diagnostics.Processを使用して.net/c#からバッチファイルを実行しようとしています。どういうわけか、バッチファイルのxcopyコマンドを実行しません。

サンプルバッチファイル:

#copy test to test2 including sub directories
xcopy c:\test\ c:\test2 

C#コード:

    public void RunMSIBatchFile(string _workingDirectory, string batchFileName)
    {
        var process = new Process
        {
            StartInfo =
            {

                UseShellExecute = false,
                RedirectStandardOutput = true,
                WorkingDirectory = _workingDirectory,
                FileName = _workingDirectory + batchFileName,
                CreateNoWindow = true,
                RedirectStandardError = true
            }
        };

        process.OutputDataReceived += ProcessOutputDataReceived;
        process.Start();
        process.BeginOutputReadLine();
        process.WaitForExit(Convert.ToInt32(CommandTimeOut.TotalMilliseconds));
    }

UseShellExecuteをtrueに変更すると機能しますが、標準出力をキャプチャする方法がないようです。

誰かがそのような問題に直面したことがありますか?

4

1 に答える 1

1

私はあなたの正確なコードをテストしました、そしてデータをうまく受け取ることができるようです。ただし、読み取りは非同期で行われるため、すべてのデータを読み取るWaitForExit(...)に戻ることができます。データの終わりは、イベントハンドラーに渡されたプロパティがnullであることによって通知されているようです。DataDataReceivedEventArgsOutputDataReceived

xcopyまた、ユーザーからの入力を要求した場合(たとえば、宛先に同じ名前のファイルが存在する場合)、データが返されないように見えることにも注意してください。バッチファイルでこれを確認するか、標準エラーストリームからのデータを処理することもできます。

于 2013-01-08T16:19:18.097 に答える