2011-01-17 3 views
1

Я пишу небольшое консольное приложение (будет запущено как служба), которое в основном запускает приложение Java при его запуске, закрывается, если приложение Java закрывается, и закрывает приложение Java, если оно закрывается.Обнаружение закрытия приложения в C# NET?

Я думаю, что у меня есть первые два, работающих нормально, но я не знаю, как определить, когда приложение .NET закрывается, чтобы я мог завершить работу приложения Java до этого. Поиск в Google просто возвращает кучу вещей об обнаружении закрытия Windows.

Может ли кто-нибудь сказать мне, как я могу справиться с этой частью, и если все остальное выглядит нормально?

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

Могу ли я спросить, почему у вас есть эта обертка? Вы пытаетесь убедиться, что сервер Minecraft всегда работает? – Bobby

+0

Да. При запуске с помощью файла .bat наша игровая панель не может определить, работает ли приложение или нет, поэтому функции Start/Stop/Restart не работают в настоящее время. –

ответ

3

Вам нужно будет зарегистрировать это событие в основной метод:

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

и добавить обработчик событий

public void OnApplicationExit(object sender, EventArgs e) 
{ 
    try 
    { 
     Console.WriteLine("The application is shutting down."); 
    } 
    catch(NotSupportedException) 
    { 
    } 
} 
Смежные вопросы