Вопрос

Я создал приложение WinForm (Monitoring) с использованием VS 2005 (C #), и теперь у меня есть проблема, когда это приложение сбивает по какой-то причине, я должен быть уверен, что он будет перезапущен автоматически.

Как я могу решить это? (Может быть, используя приложение Windows Services?)

Спасибо

Это было полезно?

Решение 6

Спасибо всем, решение, которое я выбираю: в главной программе я добавляю события исключения (UnhandlededExceptionEventhandler & ThreadExceptionEventHandler см. Выше) В этих событиях я перезагружаю программу (также поместите журнал и электронную почту в отслеживание ошибок). И для задачи перезагрузки я добавляю ключ реестра в [HKEY_LOCAL_MACHINE Software Microsoft Windows Centreversion Run] с моим путем приложения, чтобы убедиться, что мое приложение будет перезапущено после перезагрузки Windows;)

Другие советы

Да, создание Windows Service будет работать, как вы можете установить его, чтобы автоматически перезапустить, если он сбивает сбой, но лучший способ, чтобы предотвратить разбойник в первую очередь! Есть ли определенная причина, по которой это вылетает?

С хорошей обработкой ошибок и сообщению, вы можете написать его, чтобы он просто сообщил о любых ошибках, которые возникают и выполняют, какие IMHO будет лучшим путем для перехода

Учти это:

http://msdn.microsoft.com/en-us/library/cc303699.aspx.

[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
    [MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
    int flags);

Минимальный поддерживаемый сервер

Windows Server 2008.

http://msdn.microsoft.com/en-us/library/aaa373347(vs.85).aspx.

Создание службы Windows - это очень хорошая идея для любого длинного фонового процесса по многим причинам, Однако повторно запуск разбитого приложения не является одним из них!

Вы должны отработать, почему приложение разбивается и предотвращает его происходящее.

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

За*сильный текст* Приложение для наблюдения. Вы должны создать таймер на службе Windows и Code что-то вроде этого в Timer Tick Ticking Event:

        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");

Если вы действительно не сможете сделать что-либо о проблеме с крахом, я бы порекомендовал попробовать вместо наблюдателя. (Не забудьте перебрасывать обрабатываемые основные исключения)

    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        catch(Exception ex)
        {
            //log the exception here
            Application.Restart();
        }
    }

Поскольку вы говорите, что вы используете приложение Windows Forms, вы не можете использовать службу Windows для этого, поскольку служба Windows не разрешается иметь графический интерфейс.

То, что я бы сделал это, что я бы создал невидимое приложение «Watchdog», которое контролирует процесс и автоматически перезапускается его, когда он сбивает.

Вы можете поставить пробовать ловить блокировку вокруг кода, который, скорее всего, вызывает сбой. Затем напишите сообщение об исключении в файл журнала. Вы также можете установить точку отладки в блоке Catch Catch, чтобы увидеть другие детали, такие как стек вызова и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top