Показать окно сообщения из службы Windows
Можете ли вы отобразить окно сообщения (или любую форму уведомления) из службы Windows? Не могу заставить его работать. Я использовал:
global::System.Windows.Forms.MessageBox.Show("A fatal error occurred. " +
ServiceName + " is now terminating.");
но это не сработало и просто выдало ошибку.
7 ответов
Нет, вы не можете показать окно сообщения от службы. Если вы хотите сообщить об ошибках, стандартный способ сделать это с помощью журнала событий.
Для более "продвинутых" типов пользовательского интерфейса (не только для отчетов об ошибках) обычно это делается с помощью обычного приложения Windows, которое вы помещаете в папку автозагрузки пользователя (или ключ запуска в реестре) и которое обращается к службе через какой-то механизм IPC (удаленное взаимодействие.NET, WCF, обычные сокеты, именованные каналы и т. д.).
Вы можете отобразить сообщение от службы с помощью функции "WTSSendMessage", вот хорошая статья: http://msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx
Разрешить службе взаимодействовать с рабочим столом поможет вам сделать это из консоли Services.msc.
НО, это очень плохая идея. Особенно, если вы забудете удалить это сообщение позже. Служба будет зависать, так как у вас будет окно сообщения, на которое никто не сможет нажать.
Из Википедии:
Хотя обычно службы не имеют пользовательского интерфейса, разработчики могут добавлять формы и другие компоненты пользовательского интерфейса. В этом случае "Разрешить службе взаимодействовать с рабочим столом" следует проверить на вкладке "Вход в систему" в диалоговом окне свойств службы (хотя следует проявлять осторожность при таком подходе, поскольку это может вызвать угрозу безопасности, поскольку любой вошедший в систему пользователь сможет взаимодействовать с сервисом).
Если эта опция включена, вы сможете отображать окна сообщений от службы.
в winxp есть только интерактивный флаг процесса для службы, и все работает хорошо. не пробовал это 10/11
ОС:XP, включающий интерактивный режим для служб Windows
Процедура
- Откройте панель управления службами. Например: Пуск> Панель управления> Администрирование> Службы.
- Выберите услугу "Чугунный безопасный соединитель".
- Щелкните правой кнопкой мыши имя службы и выберите "Свойства". Откроется окно свойств службы.
- Выберите вкладку "Вход в систему".
- Выберите Локальную системную учетную запись, а затем выберите Разрешить службе взаимодействовать с рабочим столом.
- Нажмите ОК.
- Нажмите Перезагрузить.
Нет, ты не можешь. Сервисы Windows не имеют графического интерфейса. Но вы можете показать небольшое уведомление в системном трее.