繁体   English   中英

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

[英]Hide console window from Process.Start C#

我正在尝试使用 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();

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

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

在页面的备注部分下:

如果 UseShellExecute 属性为 true 或 UserName 和 Password 属性不为空,则忽略 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;
}

我对这个答案很不走运,这个过程(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();

这不显示窗口:

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

...
cmd.Start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM