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 回答