Программа для Windows, которая всегда работает - PullRequest
2 голосов
/ 24 июня 2011

У меня есть требование, чтобы программа Windows Forms C # .NET 2.0, работающая в пользовательском пространстве (не в службе), всегда работала.Поскольку я не безошибочен и делаю ошибки в кодировании, я хотел знать о любых дополнительных мерах предосторожности, которые я мог бы использовать для обеспечения выполнения этого требования.Я думал о том, чтобы TaskScheduler проверял его каждые 5 минут, наблюдатель заглушки или вторичный процесс.Это хорошие / плохие идеи?

Спасибо, Ричард

РЕДАКТИРОВАТЬ: причина, по которой я не использовал службу (очевидный и разумный ответ!) Была программа работает в среде типа киоска и имеет тяжелый компонент GUI,Параметр службы не работал должным образом в Windows 2000 - W7.

РЕДАКТИРОВАТЬ: Вторая причина не использовать службу была в том, что приложению требуется доступ к Интернету, и на некоторых сайтах наших клиентов прокси установлены толькоразрешить конкретным пользователям (не локальной системной учетной записи), поэтому было бы сложно обеспечить доступ, если на компьютере подключено несколько пользователей.

Ответы [ 2 ]

5 голосов
/ 24 июня 2011

Планировщик заданий - дешевое решение, которое работает.Я использую это для того, чтобы наш прокси-сервер Perforce работал (у него были некоторые проблемы со службой), и до сих пор проблем не было - хотя сейчас я сказал, что сервер, вероятно, взорвался!Решение - это служба Windows, которая вызывает ваше приложение.Вы можете заставить эту службу перехватывать коды возврата ошибок из приложения, перезапускать его при сбое и уведомлять вас по электронной почте, что может помочь вам в диагностике и устранении этих проблем.Я думаю, что Task Scheduler делает что-то похожее, но он не сможет обеспечить такое же понимание вашего приложения, как пользовательский сервис.

Если вы не знаете, как это сделать, то что-то подобноеработа: http://www.codeproject.com/KB/install/csharpsvclesson1.aspx

4 голосов
/ 24 июня 2011

Существует три подхода, которые вы можете использовать:

  1. Heartbeat Message.

    Heartbeat полезен в распределенном приложении и представляет собой просто сообщение, которое отправляется (изскажем клиент-сервер), чтобы подтвердить, что он все еще работает.

  2. Процесс менеджера

    Программа-заглушка, реализованная как пользовательский процесс или служба.Он запускает основное приложение, отслеживает любые необработанные исключения, сообщает об ошибках и перезапускается при сбое.

  3. Защита исключений на точке входа.

    A try-catch-все в точке входа приложения.

Я бы порекомендовал любой из первых двух вариантов;Третий вариант, try-catch-all, является особым взломом для ленивого и неопытного программиста (IMHO).

Я успешно использовал и пульс, и процесс менеджера в большом распределенном приложении.

ОБНОВЛЕНИЕ

Что касается готовых к запуску менеджеров перезапуска ™взгляните на Windows API Codepack, как описано в сообщении в блоге Эммануэля Истача (http://istacee.wordpress.com/2013/09/21/automatic-recovery-restart-in-net-application/).

Вы можете установить пакет с https://www.nuget.org/packages/WindowsAPICodePack-Core/

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