it-swarm.com.ru

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

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

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 ....

85
Kris-I

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

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

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

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

107
Justin Skiles

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

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

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

23
Mike de Klerk

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

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

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

10
Asmita Chavan

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

8
cr4ne

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

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"

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

4
John

Эта ошибка возникает, когда в вашем методе 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
santhosh

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

откройте свойства служб, выберите вкладку log on и установите флажок, чтобы служба могла взаимодействовать с рабочим столом,  click allow service to interact with desktop

3
kudzai zishumba

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

 enter image description here

3
Akshay Anand

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

2
Nicholas Blumhardt

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

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

1
Vijay kumar.S

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

Я закончил тем, что отдал все разрешения моей корзине/отладке.

Вопрос до сих пор не решен.

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

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

1
Rashmi Pandit

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

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

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

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
1
Jay Shah

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

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

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

1
Shiraz Bhaiji

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

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

1
MagTun

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

1
Sankar

После нескольких часов, пытаясь понять это, мой метод «Main» был очищен от кода!

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

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

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

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

Szhlopp

0
Szhlopp

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

0
Guilherme Noronha

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

0
Ali786

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

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

0
Frank Bryce

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

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

0
Chris

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

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

0
Pieter van Ginkel

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

0
Darshana

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

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

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

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

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

0
Jamie Butterworth

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

Это все.

0
Rai

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

0
Alexander Puchkov

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

0
meda