Cómo ejecutar una aplicación de consola C # con la consola oculta

¿Hay alguna manera de ocultar la ventana de la consola cuando se ejecuta una aplicación de consola?

Actualmente estoy usando una aplicación de Windows Forms para iniciar un proceso de consola, pero no quiero que se muestre la ventana de la consola mientras se está ejecutando la tarea.

Si está utilizando la clase ProcessStartInfo , puede configurar el estilo de ventana como oculto:

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

Si escribió la aplicación de la consola, puede ocultarla de manera predeterminada.

Cree una nueva aplicación de consola y luego cambie el tipo de “Tipo de salida” a “Aplicación de Windows” (hecho en las propiedades del proyecto)

Si está utilizando Process Class, puede escribir

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

before yourprocess.start(); y el proceso estará oculto

La respuesta simple es que: Vaya a las propiedades de su aplicación de consola (propiedades del proyecto). En la pestaña “Aplicación”, simplemente cambie el “Tipo de salida” a “Aplicación de Windows”. Eso es todo.

Puede usar la API de FreeConsole para separar la consola del proceso:

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

(por supuesto, esto solo es aplicable si tiene acceso al código fuente de la aplicación de la consola)

Si está interesado en la salida, puede usar esta función:

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

Ejecuta el progtwig de línea de comando dado, espera que termine y devuelve el resultado como una cadena.

Si está creando un progtwig que no requiere la participación del usuario, siempre puede simplemente crearlo como un servicio. Un servicio no mostrará ningún tipo de UI.

Sé que no estoy respondiendo exactamente lo que quieres, pero me pregunto si estás haciendo la pregunta correcta.

¿Por qué no usas ninguno de los dos?

  1. servicio de ventanas
  2. crea un nuevo hilo y ejecuta tu proceso en ese

Esos parecen mejores opciones si todo lo que desea es ejecutar un proceso.

Aunque como otras respuestas aquí han dicho que puede cambiar el “Tipo de salida” a “Aplicación de Windows”, tenga en cuenta que esto significará que no puede usar Console.In ya que se convertirá en NullStreamReader.

Console.Out y Console.Error parecen funcionar bien sin embargo.

Agregue esto a su clase para importar el archivo DLL:

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

Y luego, si quieres ocultarlo, usa este comando:

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

Y si quieres mostrar la consola:

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

Solo escribe

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

Basado en la respuesta anterior de Adam Markowitz, el siguiente funcionó para mí:

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