我目前正在通过调用 xcopy 来递归复制目录,通过System.Diagnostics.Process
类。
这很有效,直到我尝试通过System.Diagnostics.ProcessStartInfo.RedirectStandardOutput
参数重定向标准输出。它没有在控制台中打印任何内容,导致副本失败。
为什么单独使用此参数System.Diagnostics.ProcessStartInfo.RedirectStandardOutput
,足以使命令在设置为 true 时失败?
是否因为它重定向所有输出,如文件描述符?
我真的不明白这个问题。这是我的代码:
public string ExecuteCommandSync(WinProcParams parameters)
{
try
{
ProcessStartInfo procStartInfo;
Console.WriteLine("[PROC][EXEC] " + parameters.executable + " : " + parameters.command);
// If it's a call to cmd, /c tells cmd that we want this to be executed and then exit
if (parameters.executable == "cmd")
procStartInfo = new ProcessStartInfo(parameters.executable, "/c " + parameters.command);
else
procStartInfo = new ProcessStartInfo(parameters.executable, parameters.command);
procStartInfo.RedirectStandardOutput = false; //true
procStartInfo.UseShellExecute = false;
procStartInfo.ErrorDialog = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
if (!proc.Start())
Console.WriteLine("[PROC][ERROR] Command failed to launch!");
string result = proc.StandardOutput.ReadToEnd();
Console.WriteLine("[PROC][STDOUT] " + result);
proc.WaitForExit();
}
catch (Exception objException)
{
return objException.ToString();
}
return "";
}
当RedirectStandardOutput
设置为true
时,会打印“[PROC] [STDOUT]”行。在另一种情况下,它没有。
这是设置为 true 时的输出:
[PROC][EXEC] cmd : %windir%\system32\xcopy.exe "C:\Users\Quentin\Documents\Toto" "C:\Users\Quentin\Documents\Toto_7-9-2014_16-58-17" /H /J /E /C /R /I /K /Y
Le thread '<Sans nom>' (0x1acc) s'est arrêté avec le code 0 (0x0).
[PROC][STDOUT]