devlanfear
@devlanfear

Активность только 1 приложения в системе и поддержка его работоспособности

Есть задача: запустить на некотором количестве ПК программу (Windows, .NET) и держать ее всегда активной (т.е. при падении она должна снова запуститься), требуется поддержка обновления (предполагается использовать Click-once) и сбор статистики локально для последующей отправки на сервер.
Доступа к машинам после установки не будет, поэтому любой баг/отсутствие логов чреват кучей головной боли.

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

Или хотя бы подскажите по каким словам гуглить :)

Спасибо.
  • Вопрос задан
  • 2430 просмотров
Пригласить эксперта
Ответы на вопрос 4
magnitudo
@magnitudo
Архитектор, программист, предприниматель...
Вообще. Приложение не должно «падать» ;)

Если вы хотите, чтобы программа запускалась еще и когда пользователь её пристрелит более изощрённым способом чем через диспетчер задач, то тут по-простому не получится (нужно делать службу, которая будет следить за приложением, а приложение должно следить за службой и перезапускать друг друга, но и это пользователь сможет победить, но уже существенно сложнее. И служба, если я не ошибаюсь, через ClickOnce не ставиться).

В противном случае отслеживайте событие завершения программы пользователем и перехватывайте все необработанные исключения (AppDomain.CurrentDomain.UnhandledException, Application.ThreadException для WinForms, например) и в этом случае перезапускайте приложение.
Ответ написан
Мне кажется, стоит разделять такое ПО как минимум на два компонента. Первый — собственно сама программа, которая выполняет полезный функционал, пишет лог своей работы. Второй компонент — служба, которая мониторит состояние первого компонента, перезапускает его в случае необходимости, проверяет наличие обновлений ПО и конфигов на сервере, обновляет, отправляет на сервер статистику и логи ошибок.

По поводу подводных камней — из собственного опыта — не стоит запускать много копий ПО одновременно :) Т. е. стоит четко определить условие запущенности/не запущенности программы и проверить его корректность. Сам однажды неправильно составил логическое условие в PowerShell скрипте. Память сервера переполнялась и он вис. Хоть и был удаленный доступ к машине — все равно пришлось ехать на место происшествия. Потом долго отлавливал место ошибки.
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Отдельно служба обновлений, отдельно — мониторинг+перезапуск, отдельно отправка логов.
Количество запущенных копий тоже можно ограничить.
можно повесить запуск программы вместо explorer'а, но тогда нужно будет предусмотреть политиками отключение ctrl-alt-del/taskman и других (неразрешенных) программ.
Но нужно учесть, что когда есть физический доступ к системе — локальные и групповые политики а также пароль админской учетки сбрасывается елементарно.
Ответ написан
Комментировать
SychevIgor
@SychevIgor
Чем Вам не нравится вариант запуск через планировщик windows по расписанию каждые n минут и поставить галку, что если уже 1 экземпляр запущен, то второй не запускать?

Не уверен что именно этого вы хотите, но этот вариант без написания кода по крайней мере и может оказаться не менее эффективным
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы