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

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

 proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden 

但仍显示控制台窗口。 即使我已经redirect输出和错误到单独的stream,但没有运气。

有没有其他的方法来隐藏控制台窗口? 请帮我一下

这是我用来执行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(); 

3 Solutions collect form web for “从Process.Start隐藏控制台窗口C#”

尝试启动进程而未显示控制台窗口时遇到类似问题。 我testing了几个不同的属性值组合,直到我find一个展现出我想要的行为。

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

在页面的备注部分下:

如果UseShellExecute属性为true或者UserName和Password属性不为空,则CreateNoWindow属性值将被忽略,并创build一个新窗口。

 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; } 

这个回答我运气不好,程序(Wix light.exe)本质上是出去吃午饭,不能及时回家吃饭。 不过,下面的工作对我来说很好:

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

这应该工作,因为它为我工作。 所以试试吧

添加系统参考。

 using System.Diagnostics; 

然后使用这个代码在一个隐藏的CMD窗口中运行你的命令。

 Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmd.StartInfo.Arguments = "Enter your command here"; cmd.Start(); 
  • 是否有单个.NET进程的内存限制
  • 从线内分叉是否安全?
  • 等到一个过程结束
  • 杀死所有subprocess的最好方法
  • 在两个应用程序间共享内存
  • 如何以编程方式确定特定进程是32位还是64位
  • C# - 创build一个Process.Start等到进程启动
  • 在64位Windows上列出正在运行的进程
  • 拦截正在运行的subprocess的stdout
  • Android - 如何决定是否在单独的进程中运行服务?
  • 在Android中将应用上下文保存到静态variables是否安全?