ventana programacion ocultar hacer ejemplos ejecutar desde como comandos batch bat avanzados automaticamente autoejecutable archivos archivo c# process batch-file

c# - programacion - ¿Cómo ocultar la ventana de cmd mientras se ejecuta un archivo por lotes?



ocultar ventana cmd (4)

¿Cómo ocultar la ventana de cmd mientras se ejecuta un archivo por lotes?

Uso el siguiente código para ejecutar el archivo por lotes

process = new Process(); process.StartInfo.FileName = batchFilePath; process.Start();


De acuerdo con las propiedades del Proceso , usted tiene un:

Propiedad: CreateNoWindow
Notas: le permite ejecutar un programa de línea de comando en silencio. No muestra una ventana de consola.

y:

Propiedad: WindowStyle
Notas: Use esto para configurar ventanas como ocultas. El autor ha utilizado ProcessWindowStyle.Hidden menudo.

¡Como ejemplo!

static void LaunchCommandLineApp() { // For the example const string ex1 = "C://"; const string ex2 = "C://Dir"; // Use ProcessStartInfo class ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.FileName = "dcm2jpg.exe"; startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.Arguments = "-f j -o /"" + ex1 + "/" -z 1.0 -s y " + ex2; try { // Start the process with the info we specified. // Call WaitForExit and then the using statement will close. using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } } catch { // Log error. } }


Esto es lo que funcionó para mí. Cuando redirige todas las entradas y salidas, y establece la ventana oculta, debería funcionar.

Process p = new Process(); p.StartInfo.RedirectStandardError = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true;


Si proc.StartInfo.UseShellExecute es falso , entonces está iniciando el proceso y puede usar:

proc.StartInfo.CreateNoWindow = true;

Si proc.StartInfo.UseShellExecute es verdadero , entonces el sistema operativo está iniciando el proceso y debe proporcionar una "pista" al proceso a través de:

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

Sin embargo, la aplicación llamada puede ignorar esta última solicitud.

Si usa UseShellExecute = false , es posible que desee considerar redirigir la salida / error estándar para capturar cualquier registro producido:

proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardOutput = true; proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); proc.StartInfo.RedirectStandardError = true; proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler);

Y tener una función como

private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) { if (!String.IsNullOrEmpty(outLine.Data)) // use the output outLine.Data somehow; }

Hay una buena página que cubre CreateNoWindow esto en un blog de MSDN .

También hay un error en Windows que puede arrojar un diálogo y derrotar CreateNoWindow si está pasando un nombre de usuario / contraseña. Para detalles

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476 http://support.microsoft.com/?kbid=818858


Use: process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;