c#:无法正确使用RedirectStandardOutput进行Windows进程

时间:2014-09-07 15:15:36

标签: c# process redirectstandardoutput

我目前正在通过调用 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] 

0 个答案:

没有答案