Ошибка 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.

Крис-I
источник
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. Дважды нажмите ОК
cmcginty
источник
11
"СИСТЕМА" у меня не работала, я просто играл и пробовал "СЕРВИС" - это помогло.
Экстер
4
Добавление «СЛУЖБЫ» и предоставление ей «Полный доступ» сработало для меня - Windows 10.
Фредрик
Поскольку для моего свойства учетной записи ServiceProcessInstaller (в моем ProjectInstaller) было установлено значение LocalService, я предоставил полные разрешения учетной записи локальной службы, и это помогло!
Дэйв,
14

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

Асмита Чаван
источник
Спасибо. У меня была проблема с запуском tor.exe --service, и теперь он работает как шарм!
Арман Карими
Работал у меня. Однако есть ли способ указать это программно?
Sisir
Понял. Щелкните правой кнопкой мыши serviceProcessInstaller -> Свойства -> Учетная запись и установите для него значение «LocalSystem» вместо значения по умолчанию «Пользователь». Устанавливаем сервис и вуаля.
Sisir
10

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

Aage
источник
Я случайно оставил там папку вместо .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

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

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

Виджай Кумар.S
источник
2

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

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

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

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

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

SO Пользователь
источник
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

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

MagTun
источник
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

На случай, если в системе закончится свободное место на локальном диске.

Александр Пучков
источник
0

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

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

Фрэнк Брайс
источник
0

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

Али786
источник
0

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

Это все.

Рай
источник
0

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

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

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

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

Амрик Сингх
источник
-1

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

SabineA
источник