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