Запуск службы Windows как угодно, но не администратор дает "доступ запрещен"


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

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

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

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

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

Разрешения

Список Procmon

Детали Procmon

1 3

1 ответ:

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

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

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