Альтернатива MessageBox.Show () для сервисов C # - PullRequest
0 голосов
/ 25 января 2012

В Windows XP MessageBox.Show () был жизнеспособным способом подсказывать пользователю, когда наш сервис не запускается по неизвестной причине.Однако с Vista и выше сервисы больше не показывают это сообщение, что понятно, поскольку в большинстве случаев блокировка сервиса с помощью диалогового окна нежелательна.Какие (предпочтительно не блокирующие) альтернативы MessageBox.Show () доступны для сервисов?

Ответы [ 6 ]

5 голосов
/ 25 января 2012

Службы Windows должны записывать в журнал событий Windows при возникновении ошибок. Желательно журнал приложений.

Вам потребуется создать источник событий для службы, и для этого вам потребуются права администратора, так что это должно быть сделано во время установки.

2 голосов
/ 25 января 2012

У вас есть два основных варианта:

  1. Создайте пользовательское загрузочное приложение, которое запускается в системном трее. Это приложение будет подключаться и получать сообщения от службы (это похоже на работу антивирусных программ).

  2. Запишите все ваши сообщения и исключения в журнал событий. Вы можете использовать журнал событий приложений для критических проблем и журнал событий приложений для информационных или диагностических сообщений.

Вышеуказанные параметры не являются взаимоисключающими, и вы всегда должны использовать # 2.

2 голосов
/ 25 января 2012

Использовать системный журнал событий: http://support.microsoft.com/kb/307024

1 голос
/ 25 января 2012

Обычно для регистрации используется EventLog (например, запуск / остановка службы, ошибки и т. Д.).

Если вам требуется дополнительная трассировка, используйте System.Diagnostics.Trace или Debug, а затем используйте инструмент для мониторинга, например DebugView.

1 голос
/ 25 января 2012

Ведение журнала - это только один правильный способ информировать пользователя о проблемах обслуживания. Журнал событий является предпочтительной системой регистрации услуг.

1 голос
/ 25 января 2012

Заявление:

private static TraceSource _traceSource = new TraceSource("YourSourceName");

Использование, см. MSDN :

_traceSource.TraceEvent(...);

Конфигурация:

 <system.diagnostics>
      <sources>
           <source name="YourSourceName" switchValue="All" switchType="System.Diagnostics.SourceSwitch">
                <listeners>
                     <add name="eventLog" />
                </listeners>
      </source>
    <trace autoflush="true">
        <listeners>
            <add name="eventLog" />
        </listeners>
    </trace>
    <sharedListeners>
        <add name="eventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="SourceName" />
    </sharedListeners>
 </system.diagnostics>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...