Откриване на изключване на приложение в C# NET?

Пиша малко конзолно приложение (ще се изпълнява като услуга), което основно стартира Java приложение, когато то работи, изключва се, ако Java приложението се затвори, и изключва Java приложението, ако се затвори.

Мисля, че първите две работят правилно, но не знам как да открия кога приложението .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");
            }
        }
    }
}

person Michael Pfiffer    schedule 17.01.2011    source източник
comment
Може ли да попитам защо имаш тази обвивка? Опитвате ли се да сте сигурни, че сървърът на Minecraft винаги работи?   -  person Bobby    schedule 18.01.2011
comment
да Когато го стартираме с .bat файл, панелът ни за игри не може да разбере дали приложението работи или не, така че функциите Старт/Стоп/Рестартиране не работят в момента.   -  person Michael Pfiffer    schedule 18.01.2011


Отговори (4)


Ще трябва да регистрирате това събитие във вашия основен метод:

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

и добавете манипулатора на събитието

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

Ааа Майнкрафт :)

Тъй като вашето конзолно приложение в крайна сметка ще стане услуга за Windows, погледнете OnStop, OnPowerEvent, onPause и onShutDown методите на ServiceBase клас.

person tenor    schedule 17.01.2011

Ще искате да добавите манипулатор на събития към Application.ApplicationExit събитие.

person Anon.    schedule 17.01.2011

Казахте, че ще работи като услуга.

В този случай ще бъде извикан защитен метод OnStop() на класа ServiceBase.

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstop(v=VS.85).aspx

person sidon    schedule 17.01.2011