我通过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;
并且输出仍然放在命令窗口中。
答案 0 :(得分:2)
当我在盒子上尝试本地时,这是有效的。您可以通过替换exe路径/名称来试一试。
来自MSDN doc。
"当Process将文本写入其标准流时,该文本通常显示在控制台上。通过将RedirectStandardOutput设置为true以重定向StandardOutput流,您可以操纵或抑制进程的输出。例如,您可以过滤文本,以不同方式对其进行格式化,或将输出写入控制台和指定的日志文件"
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();
}