Показать окно сообщения из службы 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

Процедура

  1. Откройте панель управления службами. Например: Пуск> Панель управления> Администрирование> Службы.
  2. Выберите услугу "Чугунный безопасный соединитель".
  3. Щелкните правой кнопкой мыши имя службы и выберите "Свойства". Откроется окно свойств службы.
  4. Выберите вкладку "Вход в систему".
  5. Выберите Локальную системную учетную запись, а затем выберите Разрешить службе взаимодействовать с рабочим столом.
  6. Нажмите ОК.
  7. Нажмите Перезагрузить.

Нет, ты не можешь. Сервисы Windows не имеют графического интерфейса. Но вы можете показать небольшое уведомление в системном трее.

Другие вопросы по тегам