从Process.Start C#隐藏控制台窗口

时间:2011-03-21 12:14:13

标签: c# process console-application

我正在尝试使用System.Diagnostics.Process类在远程计算机上创建进程。 我能够创建一个过程。但问题是,创建服务需要很长时间,并且会显示控制台窗口。 另一个令人讨厌的事情是控制台窗口显示在我的窗体上,我不能在该窗体上执行任何其他操作。 我设置了所有属性,例如CreateNoWindow = true

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

但仍显示控制台窗口。即使我已将输出和错误重定向到单独的流,但没有运气。

还有其他方法可以隐藏控制台窗口吗?请帮帮我。

以下是我用来执行sc命令的代码部分。

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();

4 个答案:

答案 0 :(得分:104)

尝试在不显示控制台窗口的情况下启动进程时遇到类似问题。我测试了几种不同的属性值组合,直到我找到一个展示了我想要的行为。

这是一个详细说明UseShellExecute属性必须设置为false的原因的页面  http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

在页面上的备注部分:

  

如果UseShellExecute属性为true或UserName和   密码属性不为null,即CreateNoWindow属性   值被忽略,并创建一个新窗口。

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}

答案 1 :(得分:47)

我对这个答案运气不好,过程(Wix light.exe)基本上出去吃午饭,不及时回家吃饭。但是,以下方法对我来说效果很好:

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process

答案 2 :(得分:15)

这应该有用,试试;


添加系统参考。

using System.Diagnostics;

然后使用此代码在hiden CMD窗口中运行命令。

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();

答案 3 :(得分:3)

这不会显示窗口:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow = true;

...
cmd.Start();