停止在项目命令窗口中显示的过程输出

时间:2017-04-27 22:29:30

标签: c# shell command-line process

我通过Process类启动了一个exe,并且我注意到exe的输出正在我的应用程序的命令窗口中显示。 *注意 - 当我启动exe时,我确保没有打开一个窗口 - 因此,我的应用程序运行时显示的唯一窗口是我的主应用程序project.exe。

有没有办法阻止exe的输出显示在我的project.exe命令窗口中?这是我的代码:

Process process = new Process();
string exePath = System.IO.Path.Combine(workingDir, exeString);
process.StartInfo.FileName = exePath;
process.StartInfo.WorkingDirectory = workingDir;
process.StartInfo.Arguments = args;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += (s, e) => Logger.LogInfo(e.Data);

process.Start();

process.BeginOutputReadLine();
process.WaitForExit();

我甚至尝试使用以下方法将RedirectStandardOutput设置为false:

process.StartInfo.RedirectStandardOutput = false;

并且输出仍然放在命令窗口中。

1 个答案:

答案 0 :(得分:2)

当我在盒子上尝试本地时,这是有效的。您可以通过替换exe路径/名称来试一试。

来自MSDN doc。

"当Process将文本写入其标准流时,该文本通常显示在控制台上。通过将RedirectStandardOutput设置为true以重定向StandardOutput流,您可以操纵或抑制进程的输出。例如,您可以过滤文本,以不同方式对其进行格式化,或将输出写入控制台和指定的日志文件"

https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs.110).aspx

void Main()
{
    Process process = new Process();
    string exePath = System.IO.Path.Combine(@"C:\SourceCode\CS\DsSmokeTest\bin\Debug", "DsSmokeTest.exe");
    process.StartInfo.FileName = exePath;
    process.StartInfo.WorkingDirectory = @"C:\SourceCode\CS\DsSmokeTest\bin\Debug";
    process.StartInfo.Arguments = string.Empty;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.OutputDataReceived += (s, e) => Test(e.Data);
    process.Start();
    process.BeginOutputReadLine();
    process.WaitForExit();
}

// Define other methods and classes here
public void Test(string input)
{
    input.Dump();   
}