Ошибка 5: отказано в доступе при запуске службы Windows


97

Я получаю эту ошибку, когда пытаюсь запустить службу Windows, созданную на C #:

альтернативный текст

Мой код на данный момент:

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

Обновление # 1

Я решил проблему, указанную выше, предоставив разрешения учетной записи NETWORK SERVICE, но теперь у меня возникла другая проблема:

альтернативный текст

Обновление # 2

Служба не может быть запущена. System.InvalidOperationException: служба RightAccessManagementWcf.RightAccessWcf не имеет конечных точек приложения (не связанных с инфраструктурой). Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или потому, что в файле конфигурации не может быть найден элемент службы, соответствующий имени службы, или потому, что в элементе службы не определены конечные точки. в System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (описание ServiceDescription) в System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (описание ServiceDescription, ServiceDescription, ServiceHostBase serviceHost (ServiceHostBase) в System.ServiceModel.ServiceHost TimeSpan timeout) в System.ServiceModel.Channels.CommunicationObject.


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

1
Проверьте, есть ли у системного аккаунта доступ к папке.
Разработчик

Ответы:


116

Я понимаю, что этот пост старый, но нет отмеченного решения, и я просто хотел рассказать, как я решил это.

Первая Error 5: Access Deniedошибка была устранена путем предоставления NETWORK SERVICEучетной записи разрешений на выходной каталог .

Вторая Started and then stoppedошибка кажется общим сообщением, когда что-то привело к ошибке службы. Проверьте истинное сообщение об ошибке в средстве просмотра событий (в частности, «Журналы Windows> Приложение»).

В моем случае это был неправильный параметр конфигурации службы в app.config.


7
Я изменил разрешения, перейдя в папку с помощью проводника, щелкнув правой кнопкой мыши, Свойства, Безопасность, а затем назначив правильные разрешения учетной записи СЕТЕВОЙ СЛУЖБЫ в списке имен пользователей.
Джастин Скилс

В моем случае с «Ошибка 5» это была сетевая служба, не имеющая прав доступа к папке с исполняемым файлом. Поскольку это для разработки, я хотел помещать файлы не в папку Program File, а в общую папку, в которую я мог копировать файлы с машины разработчика. Предоставление сетевой службе прав Read / Execute / List должно быть достаточно хорошим.
ZZZ

5
Я добавляю «ЛОКАЛЬНЫЙ СЕРВИС» и «СЕТЕВОЙ СЕРВИС» в папку bin \ Debug и работает, спасибо!
Эрнальдо Гонсалес

3
Просто примечание для людей: если изменение разрешений не решает вашу проблему, обязательно проверьте средство просмотра событий на наличие ошибок. У меня была совершенно не связанная с этим ошибка SQL, из-за которой служба не запускалась, но по-прежнему выдавала «Ошибка 5: доступ запрещен». ошибка.
dtryan

Спасибо за заметку о «Средстве просмотра событий» - то же самое и со мной, несвязанная ошибка «Конечная точка не найдена», но замаскирована как «Доступ запрещен (5)»
Дэвид Вотрубец

26

Компьютер -> Управление -> Сервис -> свойства [вашей службы]. Затем вкладка с информацией об учетной записи. Поиграйте с этими настройками, например, запустите службу с учетной записью администратора или около того.

Это сделало это для меня.

EDIT: Что же может быть проблема заключается в том, что большинство служб работают как LOCAL SERVICEили LOCAL SYSTEMсчета. Теперь, когда вы запускаете C:/my-admin-dir/service.exeэти учетные записи, но им не разрешено выполнять что-либо в этом каталоге, вы получите error 5. Итак, найдите исполняемый файл службы, щелкните правой кнопкой мыши каталог -> Свойства -> Безопасность и убедитесь, что учетная запись, с которой запущена служба, находится в списке пользователей, которым разрешено иметь полный контроль над каталогом.


21

Это сработало для меня.

  1. Щелкните правой кнопкой мыши папку верхнего уровня, содержащую исполняемый файл службы. Перейти к свойствам
  2. Перейдите на вкладку "Безопасность"
  3. Нажмите "ИЗМЕНИТЬ"
  4. Нажмите "ДОБАВИТЬ"
  5. Введите имя «СИСТЕМА», нажмите ОК.
  6. Выделите пользователя СИСТЕМЫ и установите флажок РАЗРЕШИТЬ рядом с «Полный доступ».
  7. Дважды нажмите ОК

11
"СИСТЕМА" у меня не работала, я просто играл и пробовал "СЕРВИС" - это помогло.
Экстер

4
Добавление «СЛУЖБЫ» и предоставление ей «Полный доступ» сработало для меня - Windows 10.
Фредрик

Поскольку для моего свойства учетной записи ServiceProcessInstaller (в моем ProjectInstaller) было установлено значение LocalService, я предоставил полные разрешения учетной записи локальной службы, и это помогло!
Дэйв,

14

У меня также была такая же ошибка, она была устранена щелчком правой кнопкой мыши по Сервису> Свойства> Вход в систему> войти в систему как: учетная запись локальной системы.


Спасибо. У меня была проблема с запуском tor.exe --service, и теперь он работает как шарм!
Арман Карими

Работал у меня. Однако есть ли способ указать это программно?
Sisir

Понял. Щелкните правой кнопкой мыши serviceProcessInstaller -> Свойства -> Учетная запись и установите для него значение «LocalSystem» вместо значения по умолчанию «Пользователь». Устанавливаем сервис и вуаля.
Sisir

10

Убедитесь, что Path to executableуказывает на настоящий исполняемый файл (щелкните правой кнопкой мыши службу -> Свойства -> вкладка Общие). Через powershell (и sc.exe) вы можете установить службу, не указывая на исполняемый файл ... кхм.


Я случайно оставил там папку вместо .exe файла. Чтобы решить эту проблему, мне пришлось «sc удалить имя_службыXYZ» + перезапустить сервер, чтобы полностью удалить службу и переустановить правильный файл службы .exe. Тогда это начинается как шарм. Спасибо за этот пост.
Honza P.

Ты спас меня! Назначение папки вместо полного пути к исполняемому файлу ... Ага! Надо было выглядеть лучше ...
ilter

9

У меня есть решение:

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

теперь вы можете попробовать запустить службу.


1
Я уже выбрал "Локальная системная учетная запись" и все еще получаю сообщение.
user2568374

5

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

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Для <path_to_service_executable>я использовал путь к папке исполняемого файла, например C:\Folder.

Это должен быть путь к исполняемому файлу , например C:\Folder\Executable.exe.


4

В моем случае следующее не проверялось.

введите описание изображения здесь


2
Для других читателей, таких как я: этот снимок экрана является частью окна свойств сервиса! Откройте окно «Службы» (запустите: services.msc) и выберите «Свойства» из контекстного меню, которое появляется после щелчка правой кнопкой мыши по службе!
MohaMad

3

Для меня - папка, из которой должна была запускаться служба, и файлы в ней были зашифрованы с помощью опции Windows «Зашифровать». Удаление этого и - вуаля!


Это оказалось для меня проблемой - системные администраторы-клоуны на сервере, который я использовал, крутили какую-то ручку, чтобы по умолчанию все каталоги имели шифрование NTFS, и поэтому у LocalSystem на самом деле нет ключа шифрования для их чтения ...
KJ Tsanaktsidis

3

Эта ошибка возникает, когда в вашем OnStartметоде есть ошибка . Вы не можете открыть хост непосредственно в OnStartметоде, потому что он фактически не открывается при вызове, а вместо этого будет ждать элемента управления. Итак, вам нужно использовать поток. Это мой пример.

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

3

если у вас есть код ошибки отказа в доступе 5. то, вероятно, в вашем коде ваша служба пытается взаимодействовать с некоторыми файлами в системе, например, записывать в файл журнала

откройте log onвкладку свойств служб и установите флажок, чтобы разрешить службе взаимодействовать с рабочим столом, нажмите разрешить службе взаимодействовать с рабочим столом


3

В моем случае мне пришлось добавить «Прошедших проверку пользователей» в список «Имена групп или пользователей» в папке, где был установлен исполняемый файл.


3

Одна из причин этой ошибки - недостаточные разрешения (аутентифицированные пользователи) в вашей локальной папке. Чтобы предоставить разрешение для «Прошедших проверку пользователей». Откройте вкладку безопасности в свойствах вашей папки, отредактируйте и добавьте группу «Прошедшие проверку» и примените изменения.

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


2

У меня была служба Windows, размещенная с использованием OWIN и TopShelf. Я не смог его запустить. Та же ошибка - «Доступ запрещен 5»

Я закончил тем, что отдал всю химическую завивку своему бункеру / отладке.

Проблема все еще не решена.

Итак, я просмотрел журналы событий, и оказалось, что Microsoft.Owin.Host.HttpListenerон не был включен в библиотеку классов, содержащую стартовый класс OWIN.

Поэтому, пожалуйста, не забудьте проверить журнал событий, чтобы определить основную причину, прежде чем начинать перманент и т. Д.


2
Хороший момент - ошибка «доступ запрещен» может не иметь ничего общего с разрешениями; всегда проверяйте журнал приложения в средстве просмотра событий.
mhenry1384

привет, я также проверяю это, где находится путь `. \ logs`. Я вхожу в него с верхней полки, но его там нет
трансформатор

1

Ваш код может выполняться в контексте безопасности пользователя, которому не разрешено запускать службу.

Поскольку вы используете WCF, я предполагаю, что вы находитесь в контексте NETWORK SERVICE.

см .: http://support.microsoft.com/kb/256299


1
Я дал права «ЛОКАЛЬНАЯ СЛУЖБА» и «СЕТЕВАЯ СЛУЖБА» на мои выходные каталоги
Kris-I

Вам также необходимо настроить групповую политику для системных служб, support.microsoft.com/kb/256345/EN-US
Шираз Бхайджи,

1

Используйте учетную запись LocalSystem вместо учетной записи LocalService в установщике службы.

Вы можете сделать это, выполнив следующие изменения в представлении вашего установщика службы:
Свойства установщика процесса службы -> Установить для учетной записи значение LocalSystem.

или, выполнив следующие изменения в файле designer.cs установщика службы:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

1

Щелкните правой кнопкой мыши serviceфайл в service.msc и выберите property.

Вы увидите путь к папке, Path to executableнапример, C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Перейдите в C: \ Users \ Me \ Desktop \ project \ Tor и щелкните правой кнопкой мыши Tor.

Выберите property, security, editа затем add. В текстовом поле введите LOCAL SERVICE, нажмите ОК, а затем установите флажокFULL CONTROL

Нажмите еще addраз, затем введите NETWORK SERVICE, нажмите ok, установите флажокFULL CONTROL

Затем нажмите ОК (внизу)


0

Посмотрите Process Utilities > Process monitorиз http://www.sysinternals.com .

Это инструмент, который позволяет вам отслеживать, что делает процесс. Если вы отслеживаете этот процесс обслуживания, вы должны увидеть где-то отказано в доступе и на каком ресурсе отказано в доступе.


0

Для ошибки 5 я сделал противоположное решению выше. «Первая ошибка 5: отказано в доступе была устранена путем предоставления разрешений на выходной каталог учетной записи NETWORK SERVICE».

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


0

Если вы получаете эту ошибку на сервере, попробуйте предоставить доступ к папке, в которой вы получили настоящий исполняемый файл службы Windows. Вы должны перейти на вкладку безопасности и выбрать локальную службу в качестве пользователя и предоставить полный доступ. Вы должны сделать то же самое и для exe.


0

Я контролировал sppsvc.exe с помощью монитора процессов и обнаружил, что он пытался записать в ключ HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. После предоставления разрешений NETWORK SERVICE для этого ключа я смог запустить службу, и Windows внезапно обнаружила, что она была снова активирована.


0

Я случайно запустил свою службу, так как Local serviceрешение заключалось в переключении наLocal System


0

После того, как в течение нескольких часов я пытался понять это, мой метод "Main" каким-то образом лишился своего кода!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

Другие решения, которые я нашел:

  • Обновление .NET Framework до 4.0
  • Убедитесь, что имя службы внутри InitializeComponent () соответствует свойству имени службы установщика

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • И хороший перезапуск сервера не повредит

Сжлопп



0

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

Когда я добавил зависимости, проблема исчезла.


0

В моем случае я сохранил проект на рабочем столе, и для доступа к рабочему столу нам нужно добавить разрешение на папку, поэтому я просто переместил свою папку проекта в каталог C: \, теперь он работает как шарм.


0

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

Это все.


0

Как подсказывает всплывающее окно с ошибкой, это связано с разрешением. Так что запустите службу как учетную запись «LocalSystem».

Чтобы сделать то же самое, щелкните правой кнопкой мыши serviceProcessInstaller -> Properties -> Accountи установите "LocalSystem"вместо значения по умолчанию "User". Устанавливаем сервис и вуаля.


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

0

проверьте журнал событий Windows для получения подробного сообщения об ошибке. Я решил то же самое после проверки журнала событий.


-1

У меня была эта проблема в службе, которую я развертывал, и ни одно из других предложений по этому вопросу не помогло. В моем случае это произошло потому, что мой .config (xml) недействителен. Я сделал ошибку копирования и вставки при копировании из qualif в prod.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.