我正在尝试使用 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
在页面的备注部分下:
If the UseShellExecute property is true or the UserName and Password properties are not null, the CreateNoWindow property value is ignored and a new window is created.
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;
}
关于c# - 从 Process.Start C# 隐藏控制台窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377423/