C# XCopy不适用于UseShellExecute=false
我正在尝试使用System.Diagnostics.Process从.net/c运行批处理文件。不知何故,它不执行批处理文件的xcopy命令 批处理文件示例:C# XCopy不适用于UseShellExecute=false,c#,batch-file,xcopy,C#,Batch File,Xcopy,我正在尝试使用System.Diagnostics.Process从.net/c运行批处理文件。不知何故,它不执行批处理文件的xcopy命令 批处理文件示例: #copy test to test2 including sub directories xcopy c:\test\ c:\test2 C#代码: 如果我将UseShellExecute更改为true,则它可以工作,但似乎无法捕获标准输出 有人遇到过这样的问题吗?我已经测试了您的精确代码,似乎能够很好地接收数据。但是,由于读取是异
#copy test to test2 including sub directories
xcopy c:\test\ c:\test2
C#代码:
如果我将UseShellExecute更改为true,则它可以工作,但似乎无法捕获标准输出
有人遇到过这样的问题吗?我已经测试了您的精确代码,似乎能够很好地接收数据。但是,由于读取是异步进行的,
WaitForExit(…)
可以在读取所有数据之前返回。传递给OutputDataReceivedEventArgs
事件处理程序的DataReceivedEventArgs
属性为空,表明数据结束
还值得注意的是,如果
xcopy
请求用户输入(例如,如果目标中存在同名文件),则似乎不会返回任何数据。您可能希望在批处理文件中检查这一点,或者处理标准错误流中的数据。我已经测试了您的确切代码,似乎能够很好地接收数据。但是,由于读取是异步进行的,WaitForExit(…)
可以在读取所有数据之前返回。传递给OutputDataReceivedEventArgs
事件处理程序的DataReceivedEventArgs
属性为空,表明数据结束
还值得注意的是,如果
xcopy
请求用户输入(例如,如果目标中存在同名文件),则似乎不会返回任何数据。您可能希望在批处理文件中检查这一点,或者处理标准错误流中的数据。XCopy是特殊的。如果只重定向其输出,它将无法正常工作。您还必须重定向输入。您好,重定向标准输入解决了问题。非常感谢:)事实证明,在我们的情况下,重定向STDIN也是解决这个问题的办法。如果不重定向STDIN,xcopy将返回在STDERR上找不到的文件,这毫无意义。所有其他标准实用程序似乎都运行良好。汉斯-也许可以单独回答这个问题?XCopy很特别。如果只重定向其输出,它将无法正常工作。您还必须重定向输入。您好,重定向标准输入解决了问题。非常感谢:)事实证明,在我们的情况下,重定向STDIN也是解决这个问题的办法。如果不重定向STDIN,xcopy将返回在STDERR上找不到的文件,这毫无意义。所有其他标准实用程序似乎都运行良好。汉斯-也许可以单独回答这个问题?
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));
}