Détecter arrêt de l'application en C # NET?
-
12-10-2019 - |
Question
Je suis en train d'écrire une petite application de la console (sera RAN en tant que service) qui commence essentiellement une application Java quand il est en cours d'exécution, se ferme lui-même vers le bas si l'application Java se ferme et se ferme vers le bas l'application Java si elle se ferme.
Je crois avoir les deux premiers fonctionnent correctement, mais je ne sais pas comment détecter lorsque l'application .NET est en cours d'arrêt afin que je puisse arrêter l'application Java avant que cela se produise. Google recherche retourne juste un tas de choses sur la détection de Windows arrêter.
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");
}
}
}
}
La solution
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)
{
}
}
Autres conseils
Ahh MineCraft:)
Depuis votre application Console finira par devenir un service Windows, regard sur OnStop , OnPowerEvent , OnPause et OnShutdown méthodes de la classe de ServiceBase.
Vous aurez envie d'ajouter un gestionnaire d'événements à la balise l'événement de Application.ApplicationExit.
Vous avez dit qu'il fonctionne comme un service.
Dans ce cas, méthode protégée OnStop () de la classe ServiceBase sera appelée.
http: / /msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstop(v=VS.85).aspx