Запуск службы Windows как что-либо кроме Администратора дает "Доступ запрещен"

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

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

Я посмотрел в журнале событий, но есть только одна запись, содержащая ту же информацию: "Доступ запрещен".

Я проверил procmon, чтобы увидеть, к чему он пытался получить доступ, и, к моему удивлению, доступ запрещен, когда менеджер сервиса пытается открыть мой исполняемый файл; хотя он имеет полный доступ.

Почему доступ к исполняемому файлу запрещен? Ниже приведены снимки экрана с разрешениями исполняемого файла, выводом procmon при попытке запустить службу и подробностями первого CreateFile, который дал ACCESS DENIED.

права доступа

Список Procmon

Детали Procmon

1 ответ

Решение

Проблема заключалась в том, что исполняемый файл службы был зашифрован с помощью EFS; код ошибки (доступ запрещен) сбил меня с толку.

Служба выводилась в папку, которая была случайно зашифрована, поэтому, когда я скопировал службу в место установки, она осталась зашифрованной. После того, как я снял флажок "Зашифровать содержимое для защиты данных" в свойствах файла, сервис корректно запустился для всех пользователей.

Это объясняет, почему служба запускается только как текущий пользователь, а не как пользователь системы, включая привилегированную учетную запись "Локальная система".

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