Прежде чем кто-нибудь скажет мне - я знаю обычные барьеры для этой проблемы, особенно с Windows 7 и тому подобное. Вы не можете легко создать приложение-службу и включить в него пользовательский интерфейс.
Однако факт остается фактом: некоторые приложения делают что-то подозрительное. Убийцы вирусов, например. У большинства есть служебный компонент, обычно какой-то компонент драйвера, и пользовательский интерфейс. Пользовательский интерфейс сообщает вам, когда у вас есть вирус.
Отлично. У меня есть служба, которая выполняет некоторую обработку данных и, возможно, должна предупредить пользователя о проблемах с данными. Я использую WCF, поэтому написанная мною служба может взаимодействовать с приложением Windows Forms, которое я также написал. Приложение «Формы» просто открывает всплывающую подсказку в области уведомлений, когда служба сообщает об этом.
Но что произойдет, если пользователь закроет приложение формы? Позвольте мне вернуться к аналогии с вирусным убийцей. Что произойдет, если пользователь закроет часть пользовательского интерфейса антивирусного программного обеспечения? Прекращает ли антивирус уведомлять пользователя, если он обнаруживает вирус? Я не могу поверить, что это так.
Что я хочу знать, так это то, как я могу перезапустить свое приложение Forms, если пользователь закрывает его, случайно или намеренно? У меня в голове есть два пути.
Есть другое приложение, которое проверяет, запущено ли приложение форм. Но что, если оба закрыты? Еще одно приложение для проверки статуса этого? И еще для проверки статуса чего? Я думаю, что нет:)
Пусть служба проверит сеансы и запустит приложение Forms в соответствующем сеансе, когда пользователь вошел в систему в интерактивном режиме. Ненадежно. Что если это терминальный сервер?
Это не огромное препятствие. Если пользователь закрывает приложение форм, то он сам виноват, если не получит оповещения об обработке данных. Но я хотел бы сделать все возможное, чтобы они не все испортили.
Итак, есть идеи?