XCopy不适用于UseShellExecute = false

时间:2013-01-08 15:41:26

标签: c# batch-file xcopy

我正在尝试使用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然后它可以工作,但似乎无法捕获标准输出。

有没有人遇到过这样的问题?

1 个答案:

答案 0 :(得分:1)

我已经测试了您的确切代码,并且似乎能够很好地接收数据。但是,由于读取是异步发生的,因此WaitForExit(...)可以在读取所有数据之前返回。看来,传递给Data事件处理程序的DataReceivedEventArgs的{​​{1}}属性为null,表示数据的结尾。

值得注意的是,如果OutputDataReceived请求来自用户的输入(例如,在目的地中存在同名文件的情况下),则似乎不返回任何数据。您可能希望在批处理文件中检查此项,或者还处理标准错误流中的数据。