Проблемы с разрешениями служб Windows - PullRequest
0 голосов
/ 30 июля 2011

Я написал службу Windows, которая использует почтовый клиент openpop и получает письма. Затем он проходит через базы данных об обновлении темы и тела и все виды вещей. Он также загружает вложения и создает каталог папок на диске на основе метки времени письма, которое он отправляет по году, затем по месяцу, затем по дню и затем сохраняет изображение. Итак, я создал этот сервис на своем компьютере в процессе разработки, используя проект библиотеки классов, проект winform для отладки и проект службы Windows. Вся логика содержится в библиотеке классов. Я собираю библиотеку и ссылаюсь на dll как в форме, так и в службе Windows. Когда я собираю сервис на своей машине и устанавливаю его с помощью installutil, он работает нормально и делает то, что должен. Но когда я пошел в производство, ОС была Windows Server 2003 R2, и она использует другую строку подключения для базы данных LIVE.

Единственное, что изменилось, это строка подключения и операционная система. Я установил службу, и она установлена ​​нормально, но ничего не делает. Он не создает папки и не сохраняет изображения на диск. Я знаю, что должен был регистрировать ошибки, но это моя первая работа, и я новичок в этой области. Поэтому я попытался записать некоторые события регистрации, но он не создает журнал и не записывает события. На самом деле, если я пытаюсь создать журнал и записать событие, как мой первый вызов в подпрограмме onstart, он этого не делает. Теперь я потерян, и я не уверен, куда идти отсюда. Если вы нашли время, чтобы прочитать это, я буду благодарен за любые ваши комментарии.

Это код в моем методе OnStart.

    Dim LiveEvents As New EventLog
    If Not EventLog.SourceExists("MySource") Then
        EventLog.CreateEventSource("MySource", "GL")
    End If
    LiveEvents.Source = "MySource"
    LiveEvents.Log = "GL"
    LiveEvents.WriteEntry("ServiceStarted and is working.", EventLogEntryType.Information)
    Dim Logic As New ProcessMail
    workTimer = New Timer(New TimerCallback(AddressOf Logic.ProcessMessages), Nothing, (1000 * 60 * 10), (1000 * 60 * 10))
    LiveEvents.WriteEntry("Called Our DLL", EventLogEntryType.Information)
    MyBase.OnStart(args)

Итак, если вы не знаете, вопросы здесь, они идут. 1. Если мне нужно создать каталоги и сохранить файлы с помощью службы Windows в Windows Server 2003 R2. Какое свойство учетной записи System System.ServiceProcess.ServiceInstaller следует использовать? 2. Есть ли какой-либо особый процесс установки, который мне нужно будет выполнить в winows server 2003 R2, чтобы разрешить устанавливаемой службе иметь разрешения на чтение и запись в каталоги?

Спасибо за любую информацию и помощь, которую вы можете предоставить.

1 Ответ

1 голос
/ 30 июля 2011

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

Кроме того, возможно, что ваша проблема в другом месте. Вы должны проверить Event Viewer на наличие ошибок. Вы можете использовать несколько инструментов sysinternals, которые могут помочь вам найти проблему (http://technet.microsoft.com/en-us/sysinternals/bb545027). Учетная запись, под которой работает служба, должна иметь достаточные разрешения для записи в журнал событий. Так что это еще одна причина, чтобы попытаться запустить эту службу как привилегированный пользователь, чтобы увидеть, начнёт ли он запись в журнал. И, конечно, как вы упомянули, добавление журналирования также может быть хорошим вариантом.

Убедитесь, что служба установлена ​​без ошибок и отображается как запущенная в апплете служб.

...