从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(); 
  • 在Linux中的最大进程数
  • 在64位Windows上列出正在运行的进程
  • 如何在Python中启动后台进程?
  • 从Process.StandardOutput中捕获二进制输出
  • 如何使用Java的Runtime.exec()时添加超时值?
  • 当谈论线程和进程时,为什么说“不要同时格式化软盘”的评论很有趣?
  • 线程之间共享什么资源?
  • 监视Windows中进程完成的某些系统调用
  • 如何读取C#中另一个进程的命令行参数?
  • 如何用ProcessBuilder设置工作目录
  • 我怎样才能从Ruby中检查某个进程是否正在运行?