为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

C#
慕娘9325324 2019-09-21 15:33:05

我正在尝试使用System.Diagnostics.Process类在远程计算机上创建进程。我能够创建一个过程。但是问题是,创建服务需要很长时间,并且会显示控制台窗口。另一个烦人的事情是控制台窗口显示在我的Windows窗体顶部,而我无法对该窗体执行任何其他操作。我已将所有属性设置为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();


查看完整描述

3 回答

?
慕前端131612

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


这是详细说明为什么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;

}


查看完整回答
反对 回复 2019-09-21
?
慕雪6173905

我对这个答案很不走运,因为该过程(Wix light.exe)本质上是在吃午餐,而不能及时回家吃晚饭。但是,以下对我来说效果很好:


Process p = new Process();

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

// etc, then start process


查看完整回答
反对 回复 2019-09-21
?
慕标琳琳

这应该工作,尝试;


添加系统参考。


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();


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信