2009-07-11 9 views
16

Tengo dos aplicaciones de escritorio. Después de cerrar la primera aplicación, la primera aplicación iniciará la segunda aplicación.¿Cómo ejecuto la aplicación una de otra en C#?

¿Cómo comienzo la segunda aplicación después de terminar la primera aplicación?

Mi primera aplicación crea un escritorio independiente.

Respuesta

12

Puede usar .NET's Process Class para iniciar un proceso como lo describieron otras personas. Entonces, la pregunta es cuándo llamar.

En la mayoría de los casos, utilizar el evento Form.Closing o Form.Closed parece ser una opción fácil.

Sin embargo, si alguien más puede manejar el evento y puede establecer CancelEventArgs.Cancel en verdadero, este puede no ser el lugar correcto para hacerlo. Además, los eventos Form.Closing y Form.Closed no se generarán cuando se llame al Application.Exit(). No estoy seguro de si se generarán eventos si se producen excepciones no controladas. (Además, debe decidir si desea iniciar la segunda aplicación en caso de Application.Exit() o cualquier excepción no controlada).

Si realmente quiere asegurarse de que la segunda aplicación (App2) se inicia después de la primera aplicación (App1) salió, puede jugar un truco:

  1. Crear una solicitud por separado (APP0)
  2. APP0 lanza App1
  3. APP0 espera App1 para salir con Process.WaitExit()
  4. APP0 lanza App2 y sale de sí

La aplicación de consola de ejemplo que se adjunta a continuación muestra un caso muy simple: mi aplicación de muestra inicia primero el bloc de notas. Luego, cuando el bloc de notas sale, se inicia mspaint y se cierra.

Si desea ocultar la consola, puede simplemente configurar la propiedad 'Tipo de salida' desde 'Aplicación de consola' a 'Aplicación de Windows' en la pestaña 'Aplicación' de Propiedad del proyecto.

Código de ejemplo:

using System; 
using System.Diagnostics; 

namespace ProcessExitSample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 

       Process firstProc = new Process(); 
       firstProc.StartInfo.FileName = "notepad.exe"; 
       firstProc.EnableRaisingEvents = true; 

       firstProc.Start(); 

       firstProc.WaitForExit(); 

       //You may want to perform different actions depending on the exit code. 
       Console.WriteLine("First process exited: " + firstProc.ExitCode); 

       Process secondProc = new Process(); 
       secondProc.StartInfo.FileName = "mspaint.exe"; 
       secondProc.Start();     

      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("An error occurred!!!: " + ex.Message); 
       return; 
      } 
     } 
    } 
} 
16

Utilice Process class cuando salga de su primera aplicación.

var p = new Process(); 
p.StartInfo.FileName = "notepad.exe"; // just for example, you can use yours. 
p.Start(); 
+0

en cuyo caso tengo que empezar segundo aplicación, ya sea cierre de formulario o formulario cerrado (primera solicitud) –

+0

No importa (a menos que cancele el cierre en 'Cierre'), sin El proceso ce se inicia de forma asincrónica y no impedirá que su aplicación continúe haciendo lo que se supone que debe hacer, incluido el cierre. –

3

Se podía sin caparazón a él, para que cuando esté a punto de salir de la primera aplicación acaba de comenzar la segunda aplicación a través de: clases de

System.Diagnostics.Process.Start(@"PATH\NAME.EXE"); 
0

un código de ejemplo:

try 
{ 
    stateMainLayout b = new stateMainLayout(); 
b.Location = Screen.AllScreens[1].WorkingArea.Location; 
b.ShowDialog(); 
} 
catch 
{ 
stateMainLayout b = new stateMainLayout(); 
b.ShowDialog(); 
} 
Cuestiones relacionadas