2010-11-25 14 views
12

Quiero iniciar un nuevo proceso B.exe desde el proceso de ejecución actual A.exe.Iniciar un nuevo proceso y matar el proceso actual

Y tan pronto como se ejecute B.exe, quiero matar a A.exe (el proceso de ejecución actual).

Aunque puedo iniciar B.exe no puedo cerrar mi proceso actual, es decir, A.exe.

Código utilizo es:

//Start the BT Setup Process 
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\TEST\B.exe"); 
Process.Start(startInfo); 

//Terminate the FSA 
Process[] myProcess = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName); 
foreach (Process process in myProcess) 
{ 
    process.CloseMainWindow(); 
    //all the windows messages has to be processed in the msg queue 
    //hence call to Application DoEvents forces the MSG 
    Application.DoEvents(); 
} 
+0

por cierto no quiero usar el método Process.Kill() – srivatsa

+1

¿Por qué no quieres usar el método 'Process.Kill()'? – abatishchev

+0

porque no llama a mi código de limpieza – srivatsa

Respuesta

3

¿Por qué quiere cerrar A de B mientras A gato empezar B y cierre por sí mismo?

Process.Start("A.exe"); 
Process.GetCurrentProcess().Kill(); // or Application.Exit(); or anything else 
2

Si lo que desea es cerrar el proceso actual debe ser capaz de simplemente llamar Application.Exit en lugar de bucle a través de los procesos y de cierre.

+0

Usando Application.Exit cuelga mi aplicación A.exe. Esa es la razón por la que utilizo Process.CloseMainWindow() – srivatsa

+3

@srivatsa: Si llamar 'Application.Exit' en tu proceso hace que cuelgue, entonces diría que podría valer la pena intentar averiguar por qué, que podría responder automáticamente a tu pregunta arriba también. –

1

Sé que esto es antiguo pero en .net 4.0 que puedo hacer

ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\TEST\B.exe"); 
startInfo.UseShellExecute = true;//This should not block your program 
Process.Start(startInfo); 

Entonces Application.Exit o lo que sea Probé con una aplicación de Windows Forms usando el método de formulario de cerca después de lanzar una aplicación de consola que sólo cuadras en Console.readline();

2

Si usted está cayendo en esta búsqueda de iniciar un proceso y mata su propio proceso después, use Environment.Exit(0), no Application.Exit().

+1

La aplicación no se cerrará si hay algún subproceso en primer plano activo; Process.GetCurrentProcess(). Kill(); parece más determinista –

+0

Esto es muy importante ... porque hay momentos en los que no quieres matar a los hilos ... ¿verdad? ¡Y a veces lo haces! –

Cuestiones relacionadas