Ошибка 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
в каждом из открытых диалогов.