XCopy不能与UseShellExecute = false一起工作

本文关键字:false 一起 工作 UseShellExecute 不能 XCopy | 更新日期: 2023-09-27 17:51:04

我正在尝试使用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,那么它工作,但似乎没有办法捕获标准输出。

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

XCopy不能与UseShellExecute = false一起工作

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

同样值得注意的是,如果xcopy请求用户输入(例如,在目标中存在具有相同名称的文件的情况下),则似乎没有返回数据。你可能想在批处理文件中检查这个,或者也处理来自标准错误流的数据。