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");
            }
        }
    }
}
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top