programar - Cómo ejecutar una aplicación de consola C#con la consola oculta
estructura general de un programa en c# a nivel de consola (12)
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);
¿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.
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.
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();
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)
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?
- servicio de ventanas
- crea un nuevo hilo y ejecuta tu proceso en ese
Esos parecen mejores opciones si todo lo que desea es ejecutar un proceso.
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á creando un programa que no requiere la participación del usuario, siempre puede simplemente crearlo como un servicio. Un servicio no mostrará ningún tipo de UI.
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 programa de línea de comando dado, espera que termine y devuelve el resultado como una cadena.
Si está utilizando Process Class, puede escribir
yourprocess.StartInfo.UseShellExecute = false;
yourprocess.StartInfo.CreateNoWindow = true;
before yourprocess.start();
y el proceso estará oculto
Solo escribe
ProcessStartInfo psi= new ProcessStartInfo("cmd.exe");
......
psi.CreateNoWindow = true;
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;