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

Pra*_*sad 91 c# process console-application

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

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
Run Code Online (Sandbox Code Playgroud)

但它仍然显示控制台窗口.即使我已经重定向输出和错误分离流但没有运气.

有没有其他方法可以隐藏控制台窗口?请帮帮我.

这是我用来执行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();
Run Code Online (Sandbox Code Playgroud)

Joh*_*els 111

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

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

在页面上的备注部分:

如果UseShellExecute属性为true或UserName和Password属性不为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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我永远不会理解为什么人们会抓住他们只是再次投掷的例外. (9认同)
  • 我将 try catch 放在这段代码中主要是为了简洁(以表明这部分代码可能会抛出异常,并且应该对其进行一些处理)。过去,我再次抛出异常的原因是因为该代码(在我的应用程序中)是使用 codedom、反射和 csharpcodeprovider 执行的。重新抛出异常可以让它冒泡到上层代码,而无需在堆栈跟踪中添加额外的异常(如果我没记错的话)。我不完全确定这是必要的,但这只是我创建该应用程序的方式。 (3认同)
  • 愿意添加一些其他详细信息吗?为什么有效,而不是如何有效。 (2认同)
  • 是因为标准输出强制窗口存在吗? (2认同)

Joh*_*ood 50

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

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process
Run Code Online (Sandbox Code Playgroud)

  • 不起作用,该过程仍然显示窗口. (8认同)
  • 它仅适用于带窗口的应用程序,控制台应用程序仍显示窗口 (3认同)
  • 为我工作 - 美好而简单! (2认同)
  • 这应该是公认的答案.奇迹般有效. (2认同)
  • `CreateNoWindow = true`对我不起作用,这确实:) (2认同)

Ros*_*ala 16

这应该工作,尝试;


添加系统参考.

using System.Diagnostics;
Run Code Online (Sandbox Code Playgroud)

然后使用此代码在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();
Run Code Online (Sandbox Code Playgroud)


Leo*_*ese 12

这不显示窗口:

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

...
cmd.Start();
Run Code Online (Sandbox Code Playgroud)