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