6

我开发了一个实用程序,它将获取列表中所有服务器的时间。

System.Diagnostics.Process p;
string server_name = "";
string[] output;
p = new System.Diagnostics.Process();
p.StartInfo.FileName = "net";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StandardOutput.ReadLine().ToString()

在执行此代码时。Cmd提示屏幕即将到来。我想对用户隐藏它。我能为它做些什么?

4

4 回答 4

12

您可以告诉进程不使用窗口或将其最小化:

// don't execute on shell
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

// don't show window
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;

您可以UseShellExecute = false重定向输出:

// redirect standard output as well as errors
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;

当你这样做时,你应该使用输出缓冲区的异步读取来避免由于缓冲区溢出导致的死锁:

StringBuilder outputString = new StringBuilder();
StringBuilder errorString = new StringBuilder();

p.OutputDataReceived += (sender, e) =>
            {
                if (e.Data != null)
                {
                    outputString.AppendLine("Info " + e.Data);
                }
            };

p.ErrorDataReceived += (sender, e) =>
            {
                if (e.Data != null)
                {
                    errorString.AppendLine("EEEE " + e.Data);
                }
            };
于 2013-01-11T08:38:29.950 回答
5

尝试ProcessWindowStyle这样的枚举;

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

隐藏窗口样式。窗口可以是可见的,也可以是隐藏的。系统通过不绘制它来显示一个隐藏的窗口。如果一个窗口被隐藏,它实际上是被禁用的。隐藏窗口可以处理来自系统或其他窗口的消息,但它不能处理来自用户的输入或显示输出。通常,应用程序可能会在自定义窗口外观时隐藏新窗口,然后将窗口样式设置为 Normal。要使用 ProcessWindowStyle.HiddenProcessStartInfo.UseShellExecute 属性必须为false

于 2013-01-11T08:38:42.763 回答
1

试试这个

p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

或者也检查一下

要在没有任何窗口的情况下运行子进程,

使用 CreateNoWindow 属性并设置 UseShellExecute。

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.CreateNoWindow = true; 
info.UseShellExecute = false;
Process processChild = Process.Start(info); 

我建议您阅读 MSDN 的这篇文章:如何在新窗口、父窗口或无窗口中启动控制台应用程序

于 2013-01-11T08:38:20.293 回答
1

添加系统引用。

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();
于 2014-10-10T16:15:41.050 回答