我正在尝试使用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然后它可以工作,但似乎无法捕获标准输出。
有没有人遇到过这样的问题?
答案 0 :(得分:1)
我已经测试了您的确切代码,并且似乎能够很好地接收数据。但是,由于读取是异步发生的,因此WaitForExit(...)
可以在读取所有数据之前返回。看来,传递给Data
事件处理程序的DataReceivedEventArgs
的{{1}}属性为null,表示数据的结尾。
值得注意的是,如果OutputDataReceived
请求来自用户的输入(例如,在目的地中存在同名文件的情况下),则似乎不返回任何数据。您可能希望在批处理文件中检查此项,或者还处理标准错误流中的数据。