如何在隐藏控制台的情况下运行C#控制台应用程序

执行控制台应用程序时有没有办法隐藏控制台窗口?

我正在使用Windows窗体应用程序来启动一个控制台进程,但我不希望在任务运行时显示控制台窗口。

如果您正在使用ProcessStartInfo类,则可以将窗口样式设置为隐藏:

 System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo(); start.FileName = dir + @"\Myprocesstostart.exe"; start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 

如果您编写控制台应用程序,您可以默认隐藏它。

创build一个新的控制台应用程序,然后将“输出types”types更改为“Windows应用程序”(在项目属性中完成)

如果你正在使用过程类,那么你可以写

 yourprocess.StartInfo.UseShellExecute = false; yourprocess.StartInfo.CreateNoWindow = true; 

before yourprocess.start(); 并且进程将被隐藏

简单的答案是:转到您的控制台应用程序的属性(项目的属性)。在“应用程序”选项卡,只需将“输出types”更改为“Windows应用程序”。 就这样。

您可以使用FreeConsole API将控制台从进程中分离出来:

 [DllImport("kernel32.dll")] static extern bool FreeConsole(); 

(当然这只有在你有权访问控制台应用程序的源代码时才适用)

如果你对输出感兴趣,你可以使用这个函数:

 private static string ExecCommand(string filename, string arguments) { Process process = new Process(); ProcessStartInfo psi = new ProcessStartInfo(filename); psi.Arguments = arguments; psi.CreateNoWindow = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.UseShellExecute = false; process.StartInfo = psi; StringBuilder output = new StringBuilder(); process.OutputDataReceived += (sender, e) => { output.AppendLine(e.Data); }; process.ErrorDataReceived += (sender, e) => { output.AppendLine(e.Data); }; // run the process process.Start(); // start reading output to events process.BeginOutputReadLine(); process.BeginErrorReadLine(); // wait for process to exit process.WaitForExit(); if (process.ExitCode != 0) throw new Exception("Command " + psi.FileName + " returned exit code " + process.ExitCode); return output.ToString(); } 

它运行给定的命令行程序,等待它完成并以stringforms返回输出。

如果你正在创build一个不需要用户input的程序,你总是可以创build一个服务。 服务不会显示任何种类的用户界面。

我知道我不是在回答你想要的东西,但我想知道你是否在问正确的问题。

你为什么不使用:

  1. Windows服务
  2. 创build一个新的线程,并运行你的过程

这些听起来像更好的select,如果你想要的是运行一个进程。

尽pipe在这里的其他答案已经说过,您可以将“输出types”更改为“Windows应用程序”,但请注意,这意味着您不能使用Console.In ,因为它将成为NullStreamReader。

Console.OutConsole.Error似乎仍然工作正常。

将其添加到您的类中以导入该DLL文件:

 [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); const int SW_HIDE = 0; const int SW_SHOW = 5; 

然后如果你想隐藏它使用这个命令:

 var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE); 

如果你想显示控制台:

 var handle = GetConsoleWindow(); ShowWindow(handle, SW_SHOW); 

写吧

 ProcessStartInfo psi= new ProcessStartInfo("cmd.exe"); ...... psi.CreateNoWindow = true; 

根据Adam Markowitz的回答,以下为我工作:

 process = new Process(); process.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\""); process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //process.StartInfo.UseShellExecute = false; //process.StartInfo.CreateNoWindow = true; process.Start();