2010-04-07 15 views
12

Quiero ejecutar una aplicación de consola (por ejemplo, app.exe) desde un evento de carga de formulario de Windows. He intentado System.Diagnostics.Process.Start(), pero después de que abre app.exe, lo cierra de inmediato.cómo ejecutar la aplicación de consola desde el formulario de Windows?

¿Hay alguna forma de que pueda ejecutar app.exe y dejarlo abierto?

+1

¿Quieres ** all.exe ** para permanecer abierto? ¿Espera la entrada del usuario? Si se está cerrando, eso es porque la aplicación.exe ha hecho lo que necesita y está cerrando. –

+0

Para fines de depuración, intenta poner un comando de suspensión en app.exe durante unos 10 segundos. ¿La aplicación permanece abierta durante 10 segundos o aún se cierra de inmediato? Si hay un registro de bloqueo, ¿hay algo informado en él? – FrustratedWithFormsDesigner

+0

¿Está haciendo algo diferente cuando ejecuta app.exe desde la línea de comandos? ¿Necesitas pasar args? –

Respuesta

9

Si solo desea que la ventana de la consola permanezca abierta, puede ejecutarla con algo como este comando:

System.Diagnostics.Process.Start(@"cmd.exe", @"/k c:\path\my.exe"); 
Haciendo esto
+0

Funciona, pero mi ruta es de un cuadro de texto, así que si tengo espacio en mi camino no funcionará –

+1

@Or Betzalel: No lo he probado en esta situación específica, pero creo que podría adjuntar la ruta entre comillas dobles. O use un objeto ProcessStartInfo como parámetro para Process.Start. –

1

Si puede cambiar el código de app.exe, simplemente agregue Console.In.Read() para que espere a que se presione una tecla.

2

Si app.exe no hace nada, o termina su trabajo rápidamente (es decir, simplemente imprime "Hello World" y lo devuelve), se comportará de la manera que acaba de explicar. Si desea que el archivo app.exe permanezca abierto después de terminar su trabajo, coloque un mensaje de finalización seguido de Console.ReadKey(); en la aplicación de la consola.

1

app.exe puede terminar con Console.ReadLine() asumiendo que también es una aplicación C# donde se controla el código fuente.

1

Usted tiene uno de dos problemas, considerando su aplicación maestro/esclavo configuración:

  1. Su aplicación principal es la apertura, que muestra una forma, esa forma se ejecuta la aplicación de esclavos y se cierra de inmediato, a pesar de que la aplicación de esclavos todavía está funcionando.
  2. Su aplicación maestra se está abriendo, mostrando un formulario, ese formulario ejecuta la aplicación esclava que se cierra de inmediato.

Para el primer problema, hay que esperar/bloque para el proceso se complete (es decir Process.WaitForExit().

Para el segundo problema, parece que la aplicación de esclavos ha hecho lo que necesita (o tirada una excepción) y se está cerrando inmediatamente. Intente ejecutarlo con los mismos parámetros desde el símbolo del sistema y verifique la salida.

3

Probar:

 string cmdexePath = @"C:\Windows\System32\cmd.exe"; 
     //notice the quotes around the below string... 
     string myApplication = "\"C:\\Windows\\System32\\ftp.exe\""; 
     //the /K keeps the CMD window open - even if your windows app closes 
     string cmdArguments = String.Format("/K {0}", myApplication); 
     ProcessStartInfo psi = new ProcessStartInfo(cmdexePath, cmdArguments); 
     Process p = new Process(); 
     p.StartInfo = psi; 
     p.Start(); 

creo que esto le ayudará a la conducta que está tratando de. Suponiendo que no estuvieras tratando de ver el resultado en la ventana de comandos. Si solo quiere ver el resultado, ya tiene varias versiones de esa respuesta. Así es como puedes ejecutar tu aplicación y mantener la consola abierta.

Espero que esto ayude. Buena suerte.

1

Si tiene control sobre app.exe, debe tener en cuenta cómo funciona, así que supongo que no tiene control sobre su funcionamiento interno. En ese caso, puede tratar de pasar una bandera de ayuda que puede o no darle más información sobre cómo llamar a app.exe. Intentar algo como esto:

private startApp() 
{ 
    string command = " -h"; //common help flag for console apps 
    System.Diagnostics.Process pRun; 
    pRun = new System.Diagnostics.Process(); 
    pRun.EnableRaisingEvents = true; 
    pRun.Exited += new EventHandler(pRun_Exited); 
    pRun.StartInfo.FileName = "app.exe"; 
    pRun.StartInfo.Arguments = command; 
    pRun.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal 

    pRun.Start(); 
    pRun.WaitForExit(); 
} 
private void pRun_Exited(object sender, EventArgs e) 
{ 
    //Do Something Here 
} 
0

Crear un nuevo archivo de texto, nombrarlo app.bat y poner esta ahí:

app.exe 
pause 

Ahora tienen su punto de forma a ese archivo bat.

Cuestiones relacionadas