Detectar apagado de la aplicación en C # NET?
-
12-10-2019 - |
Pregunta
Estoy escribiendo una aplicación pequeña consola (será corrió como un servicio) que, básicamente, se inicia una aplicación de Java cuando se está ejecutando, se encierra abajo si se cierra la aplicación de java, y se apaga la aplicación Java si se cierra.
Creo que tengo los dos primeros de funcionar correctamente, pero no sé cómo detectar cuando la aplicación .NET se está cerrando por lo que puede apagar la aplicación Java antes de que eso ocurra. Google buscar sólo devuelve un montón de cosas acerca de la detección de Windows cerrando.
Puede alguien decirme cómo puedo manejar esa parte y si el resto se ve 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");
}
}
}
}
Solución
tendrá que registrar este acontecimiento en su método principal:
Application.ApplicationExit += new EventHandler(AppEvents.OnApplicationExit);
y agregar el controlador de eventos
public void OnApplicationExit(object sender, EventArgs e)
{
try
{
Console.WriteLine("The application is shutting down.");
}
catch(NotSupportedException)
{
}
}
Otros consejos
Ahh Minecraft:)
Debido a que su aplicación de consola con el tiempo se convertirá en un servicio de Windows, mirada en OnStop , OnPowerEvent , onPause y onShutDown métodos de la clase ServiceBase .
querrá agregar un controlador de eventos a la Application.ApplicationExit evento.
Usted ha dicho que va a funcionar como un servicio.
En ese método caso protegido OnStop () de ServiceBase se llamará clase.
http: / /msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstop(v=VS.85).aspx