Запуск службы Windows как что-либо кроме Администратора дает "Доступ запрещен"
Я устанавливаю службу Windows, которую я разрабатываю. Он настроен для работы в качестве сетевой службы. Когда я пытаюсь запустить эту службу, я получаю сообщение о том, что доступ запрещен. Однако сетевая служба имеет доступ к исполняемому файлу и всему каталогу, в котором она содержится.
Я также попытался запустить службу как локальная служба и локальная система, но я получаю ту же ошибку с обоими. Я не получаю никакой ошибки, и служба запускается, как и ожидалось, если я запускаю ее от имени администратора (это также учетная запись, в которую я вошел).
Я посмотрел в журнале событий, но есть только одна запись, содержащая ту же информацию: "Доступ запрещен".
Я проверил procmon, чтобы увидеть, к чему он пытался получить доступ, и, к моему удивлению, доступ запрещен, когда менеджер сервиса пытается открыть мой исполняемый файл; хотя он имеет полный доступ.
Почему доступ к исполняемому файлу запрещен? Ниже приведены снимки экрана с разрешениями исполняемого файла, выводом procmon при попытке запустить службу и подробностями первого CreateFile, который дал ACCESS DENIED.
1 ответ
Проблема заключалась в том, что исполняемый файл службы был зашифрован с помощью EFS; код ошибки (доступ запрещен) сбил меня с толку.
Служба выводилась в папку, которая была случайно зашифрована, поэтому, когда я скопировал службу в место установки, она осталась зашифрованной. После того, как я снял флажок "Зашифровать содержимое для защиты данных" в свойствах файла, сервис корректно запустился для всех пользователей.
Это объясняет, почему служба запускается только как текущий пользователь, а не как пользователь системы, включая привилегированную учетную запись "Локальная система".