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,那么它工作,但似乎没有办法捕获标准输出。
有人遇到过这样的问题吗?
我已经测试了您的确切代码,并且似乎能够接收数据很好。但是,由于读取是异步发生的,因此WaitForExit(...)
有可能在读取所有数据之前返回。似乎数据的结束是由传递给OutputDataReceived
事件处理程序的DataReceivedEventArgs
的Data
属性为空来表示的。
同样值得注意的是,如果xcopy
请求用户输入(例如,在目标中存在具有相同名称的文件的情况下),则似乎没有返回数据。你可能想在批处理文件中检查这个,或者也处理来自标准错误流的数据。