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

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

alt text

Мой код:

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, но теперь у меня есть еще одна проблема:

alt text

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

Служба не может быть запущена. System.InvalidOperationException: служба "RightAccessManagementWcf.RightAccessWcf" имеет нулевые конечные точки приложения (без инфраструктуры). Возможно, это связано с тем, что файл конфигурации не найден для вашего приложения или потому, что в файле конфигурации не найден ни один элемент службы, соответствующий имени службы, или потому, что в элементе службы не было определено никаких конечных точек.    в System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(описание ServiceDescription)    в System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(описание ServiceDescription, ServiceHostBase serviceHost)    в System.ServiceModel.ServiceHostBase.InitializeRuntime()    в System.ServiceModel.ServiceHostBase.OnOpen(тайм-аут TimeSpan)    в System.ServiceModel.Channels.CommunicationObject.Open(тайм-аут TimeSpan)    в RightAccessHosting.RightAccessHost.OnStart(String [] args) в C:\Users....

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

  • Щелкните правой кнопкой мыши папку верхнего уровня, содержащую исполняемый файл службы. Перейдите в раздел Свойства
  • Перейдите на вкладку "Безопасность".
  • Нажмите "EDIT"
  • Нажмите "ДОБАВИТЬ"
  • Введите имя "СИСТЕМА", нажмите "ОК"
  • Выделите пользователя SYSTEM и установите флажок "ALLOW" рядом с "Полный контроль"
  • Дважды нажмите кнопку ОК

Ответ 4

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

Ответ 5

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

Ответ 6

Я получил решение:

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"

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

Ответ 7

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

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

Ответ 8

Эта ошибка возникает, если в вашем методе 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();
    }
}

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

Я закончил тем, что отдал все свои мусоры /bin/Debug.

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

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

Итак, убедитесь, что вы проверили журнал событий, чтобы определить основную причину, прежде чем начинать проникать в perms и т.д.

Ответ 12

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

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

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

Ответ 13

Используйте учетную запись LocalSystem вместо учетной записи LocalService в Service Installer.

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

или сделав ниже изменение в файле designer.cs вашего установщика услуг:

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

Ответ 14

Щелкните правой кнопкой мыши по 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

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

Ответ 15

В моем случае мне пришлось добавить "Authenticated Users" в список "Group or User Names" в папке, где был установлен исполняемый файл.

Ответ 16

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

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

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

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

Надеюсь, это поможет тому, кто совершил ту же глупую ошибку, что и я.

Ответ 17

Одна из причин этой ошибки - недостаточные разрешения (Authenticated Users) в вашей локальной папке. Чтобы дать разрешение для "Прошедших проверку", откройте вкладку "Безопасность" в свойствах вашей папки, "Редактировать и добавить группу" Прошедшие проверку "и" Применить изменения ".

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

Ответ 18

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

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

Ответ 19

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

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

Ответ 20

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

Ответ 21

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

Ответ 22

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

Ответ 23

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

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

Другие найденные решения:

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

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

Szhlopp

Ответ 24

В случае, если в системе может отсутствовать свободное место на локальном диске.

Ответ 25

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

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

Ответ 26

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

Ответ 27

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

Это все.

Ответ 28

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

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

Ответ 29

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

Ответ 30

Выберите меню Start и выберите Run или воспользуйтесь комбинацией клавиш Win + R.

В диалоговом окне введите lusrmgr.msc. Когда это приложение открывается, нажмите "Пользователи" на левой панели, а затем щелкните правой кнопкой мыши Administrator на правой панели. Нажмите Properties в меню.

В диалоговом окне Administrator Properties выберите вкладку Member Of, затем нажмите кнопку "Добавить..." в правом нижнем углу. В следующем диалоговом окне выберите Advanced...

Появится другое диалоговое окно. Оттуда нажмите Find Now справа. В нижней части диалогового окна появится список результатов поиска. Выберите Network Services из этого списка и нажмите OK в каждом из открытых диалогов.