我想运行一个输出文件的控制台应用程序。
我使用以下代码:
Process barProcess = Process.Start("bar.exe", @"C:\foo.txt");
运行时,将出现控制台窗口。我想隐藏控制台窗口,以便用户看不到它。
这可能吗?使用Process.Start是启动另一个控制台应用程序的最佳方式吗?
答案 0 :(得分:14)
Process p = new Process();
StreamReader sr;
StreamReader se;
StreamWriter sw;
ProcessStartInfo psi = new ProcessStartInfo(@"bar.exe");
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.RedirectStandardInput = true;
psi.CreateNoWindow = true;
p.StartInfo = psi;
p.Start();
这将启动子进程而不显示控制台窗口,并允许捕获StandardOutput等。
答案 1 :(得分:5)
检查ProcessStartInfo并设置WindowStyle = ProcessWindowStyle.Hidden和CreateNoWindow = true。
答案 2 :(得分:1)
如果要在执行过程中检索进程的输出,可以执行以下操作(示例使用'ping'命令):
var info = new ProcessStartInfo("ping", "stackoverflow.com") {
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
};
var cmd = new Process() { StartInfo = info };
cmd.Start();
var so = cmd.StandardOutput;
while(!so.EndOfStream) {
var c = ((char)so.Read()); // or so.ReadLine(), etc
Console.Write(c); // or whatever you want
}
...
cmd.Dispose(); // Don't forget, or else wrap in a using statement
答案 3 :(得分:-1)
我们过去通过使用命令行以编程方式执行我们的流程来完成此任务。