2011-01-17 3 views
1

J'écris une petite application de console (qui sera exécutée en tant que service) qui démarre une application Java lorsqu'elle est en cours d'exécution, se ferme si l'application Java se ferme et arrête l'application Java si elle se ferme. Je pense que les deux premiers fonctionnent correctement, mais je ne sais pas comment détecter l'arrêt de l'application .NET afin de pouvoir arrêter l'application Java avant cela. La recherche Google renvoie juste un tas de choses sur la détection de la fermeture de Windows.Détecter l'arrêt de l'application dans C# NET?

Quelqu'un peut-il me dire comment je peux gérer cette partie et si le reste semble bien?

namespace MinecraftDaemon 
{ 
    class Program 
    { 
     public static void LaunchMinecraft(String file, String memoryValue) 
     { 
      String memParams = "-Xmx" + memoryValue + "M" + " -Xms" + memoryValue + "M "; 
      String args = memParams + "-jar " + file + " nogui"; 
      ProcessStartInfo processInfo = new ProcessStartInfo("java.exe", args); 
      processInfo.CreateNoWindow = true; 
      processInfo.UseShellExecute = false; 

      try 
      { 
       using (Process minecraftProcess = Process.Start(processInfo)) 
       { 
        minecraftProcess.WaitForExit(); 
       } 
      } 
      catch 
      { 
       // Log Error 
      } 
     } 

     static void Main(string[] args) 
     { 
      Arguments CommandLine = new Arguments(args); 

      if (CommandLine["file"] != null && CommandLine["memory"] != null) 
      { 
       // Launch the Application 
       LaunchMinecraft(CommandLine["file"], CommandLine["memory"]); 
      } 
      else 
      { 
       LaunchMinecraft("minecraft_server.jar", "1024"); 
      } 
     } 
    } 
} 
+0

Puis-je vous demander pourquoi vous avez cette enveloppe? Essayez-vous de vous assurer que le serveur Minecraft fonctionne toujours? – Bobby

+0

Oui. Lorsque vous le lancez avec un fichier .bat, notre panneau de jeu ne peut pas savoir si l'application est en cours d'exécution ou non, donc les fonctions Démarrer/Arrêter/Redémarrer ne fonctionnent pas actuellement. –

Répondre

3

Vous devez vous inscrire cet événement dans votre méthode principale:

Application.ApplicationExit += new EventHandler(AppEvents.OnApplicationExit); 

et ajoutez le gestionnaire d'événements

public void OnApplicationExit(object sender, EventArgs e) 
{ 
    try 
    { 
     Console.WriteLine("The application is shutting down."); 
    } 
    catch(NotSupportedException) 
    { 
    } 
} 
Questions connexes