Помилка 5: Заборонено доступ під час запуску служби Windows


97

Я отримую цю помилку під час спроби запустити службу Windows, яку я створив на C #:

alt текст

Поки що мій код:

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

Я вирішив вищезазначену проблему, надавши дозволи мережевій службі облікового запису, але зараз у мене є інша проблема:

alt текст

Оновлення №2

Послугу не можна запустити. System.InvalidOperationException: Служба 'RightAccessManagementWcf.RightAccessWcf' має нульові кінцеві точки програми (не інфраструктури). Це може бути тому, що для вашої програми не знайдено файлу конфігурації, або тому, що у файлі конфігурації не знайдено елемента служби, що відповідає імені служби, або тому, що в елементі служби не визначено кінцевих точок. у System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (ServiceDescription description) у System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (ServiceDescription description, ServiceHostBase serviceHost) System.service. TimeSpan timeout) на System.ServiceModel.Channels.CommunicationObject.


2
Вашу другу проблему непросто вирішити лише з цього повідомлення. Вам потрібно буде заглянути в журнали подій і побачити, в чому справжня помилка.
Метт Еллен,

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

Відповіді:


116

Я усвідомлюю, що ця посада стара, але немає помітного рішення, і мені просто хотілося сказати, як я це вирішив.

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

Друга Started and then stoppedпомилка, здається, є загальним повідомленням, коли щось не спрацювало службу. Перевірте у засобі перегляду подій (зокрема, "Журнали Windows> Програма"), чи немає справжнього повідомлення про помилку.

У моєму випадку це було погане налаштування конфігурації служби в app.config.


7
Я змінив дозволи, перейшовши до папки за допомогою Провідника, клацнувши правою кнопкою миші, Властивості, Безпека, а потім призначивши правильні дозволи для облікового запису МЕРЕЖА СЕРВІС у списку імен користувачів.
Justin Skiles

У моєму випадку щодо "Помилки 5" саме мережева служба не має прав доступу до папки виконуваного файлу. Оскільки він призначений для розробки, я не хотів розміщувати файли в папці Program File, а у спільній папці, яку я міг копіювати з машини розробника. Надання мережевій службі прав на читання / виконання / список має бути достатньо хорошим.
ZZZ

5
Я додаю локальну службу "та" мережеве обслуговування "у свою папку bin \ Debug і працює, дякую!
Гернальдо Гонсалес

3
Лише примітка для людей: якщо зміна дозволів не вирішить вашу проблему, обов’язково перевірте переглядач подій на наявність помилок. У мене виникла абсолютно не пов’язана помилка SQL, яка перешкоджала запуску служби, але все-таки дала мені повідомлення про помилку 5: доступ заборонено. помилка.
дтрян

Дякую за замітку про "Переглядач подій" - те саме, що зі мною, непов'язана помилка "Кінцева точка не знайдена", але замаскована під назвою "Доступ заборонено (5)"
David Votrubec

26

Комп'ютер -> Керування -> Сервіс -> [Ваша послуга]. Потім вкладка з інформацією про рахунок. Пограйте з тими налаштуваннями, як-от запустіть службу з обліковим записом адміністратора чи так.

Це зробило це для мене.

РЕДАГУВАТИ: Проблемою може бути також те, що більшість служб запускаються як LOCAL SERVICEабо LOCAL SYSTEMоблікові записи. Тепер, коли ви працюєте C:/my-admin-dir/service.exeз цими обліковими записами, але їм не дозволено виконувати щось у цьому каталозі, ви отримаєте error 5. Отже, знайдіть виконуваний файл служби, RMB - каталог -> Властивості -> Безпека та переконайтеся, що обліковий запис, за допомогою якого працює служба, є у списку користувачів, які мають повний контроль над каталогом.


21

Це працювало для мене.

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

11
"СИСТЕМА" не працювала для мене, я просто азартував і спробував "СЕРВІС" - це зробило трюк.
Exter

4
Додавання "ПОСЛУГИ" та надання йому "Повного контролю" у мене спрацювало - Windows 10.
Фредрік,

Оскільки властивість облікового запису ServiceProcessInstaller (у моєму ProjectInstaller) було встановлено на LocalService, я надав повні дозволи на рахунок локальної служби, і це зробило трюк!
Дейв

14

Я також отримав ту саму помилку, яку було вирішено, клацнувши правою кнопкою миші Служба> Властивості> Увійти> увійти як: Локальний системний обліковий запис.


Дякую. У мене була проблема з tor.exe - старт служби, і тепер це працює як шарм!
Арман Карімі

Працювали для мене. Однак, чи є в будь-якому випадку це програмно вказати?
Сісір,

Зрозумів. Клацніть правою кнопкою миші serviceProcessInstaller -> Властивості -> Обліковий запис і встановіть для нього значення "LocalSystem" замість типового "Користувача". Встановіть сервіс і вуаля.
Сісір,

10

Переконайтесь, що Path to executableвказує фактичний виконуваний файл (Служба правої кнопки миші -> Властивості -> вкладка Загальне). Через powershell (і sc.exe) ви можете встановити службу, не вказуючи на фактичний виконуваний файл ... ах.


Я випадково залишив там папку замість .exe-файлу. Щоб виправити цю проблему, мені довелося "sc видалити servicenameXYZ" + перезапустити сервер, щоб повністю видалити службу та перевстановити правильний файл .exe служби. Тоді це починається як шарм. Подяка за цей пост.
Хонза П.

Ти врятував мене! Призначення папки замість виконуваного повного контуру ... Arghhhh! Мав виглядати краще ...
кінці

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

4

У моєму випадку наступне не перевірялося.

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


2
Для інших читачів, таких як я: Цей знімок екрана є частиною вікна властивостей служби! Відкрийте вікно Служби (Запустити: services.msc) і виберіть контекстне меню Властивості, яке з’явиться після клацання правою кнопкою миші на сервісі!
MohaMad

4

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

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

Адже <path_to_service_executable>я використовував шлях до папки виконуваного файлу, наприклад C:\Folder.

Це повинен бути шлях до виконуваного файлу , наприклад C:\Folder\Executable.exe.


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

Однією з причин цієї помилки є недостатньо дозволів (автентифікованих користувачів) у вашій локальній папці. Щоб надати дозвіл на "Автентифіковані користувачі" Відкрийте вкладку "Захист" у властивостях вашої папки, Відредагуйте та додайте групу "Автентифіковані користувачі" та застосуйте зміни.

Як тільки це було зроблено, я зміг запускати служби навіть через обліковий запис мережевих служб (до цього я міг запускати лише з обліковим записом локальної системи).


2

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

Врешті-решт я віддав усі хімічні завивки своєму кошику / налагодженню.

Питання досі не було вирішено.

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

Отже, переконайтеся, що ви перевірили журнал подій, щоб визначити першопричину, перш ніж потрапляти у хімічну завивку тощо.


2
Хороший момент - помилка "доступ відмовлено" може не мати нічого спільного з дозволами; завжди перевіряйте журнал програми в Переглядачі подій.
mhenry1384

привіт, я також перевірка на це, де це `\ logs` шлях Я входу до цього з Topshelf , але його не було.
трансформатор

2

У моєму випадку мені довелося додати "Автентифіковані користувачі" до списку "Імена груп або користувачів" у папці, де була встановлена ​​виконувана програма.


1

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

Оскільки ви використовуєте WCF, я здогадуюсь, що ви перебуваєте в контексті СЕТЕВОЇ СЛУЖБИ.

див .: http://support.microsoft.com/kb/256299


1
Я надав права "LOCAL SERVICE" та "NETWORK SERVICE" на мої вихідні каталоги
Kris-I

Вам також потрібно встановити групову політику для системних служб, support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji

1

Використовуйте акаунт LocalSystem замість акаунта LocalService в Інсталяторі сервісів.

Ви можете зробити це, виконавши нижче зміну в поданні дизайну програми встановлення служби:
Властивості установника процесу обслуговування -> Встановити для облікового запису LocalSystem.

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

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

1

Клацніть правою кнопкою миші на servicein 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: Помилка відмови у доступі була усунена шляхом надання дозволів на вихідний каталог для облікового запису СЕТЕВА СЕРВІСА."

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


0

Якщо ви отримуєте цю помилку на сервері, спробуйте надати доступ до папки, у якій ви отримали справжню службу Windows exe. Вам слід перейти на вкладку безпеки та вибрати Локальну службу як користувача та надати повний доступ. Ви повинні зробити те ж саме для exe.


0

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


0

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


0

Після того, як я кілька годин вдарився про свій стіл, намагаючись зрозуміти це, я якось звільнився від коду!

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". Встановіть сервіс і вуаля.


Це перевірене робоче виправлення, а не будь-яке навколо. Чи може виборець, який
проголосував,

0

перевірити журнал подій Windows для отримання докладного повідомлення про помилку. Я вирішив те саме після перевірки журналу подій.


-1

У мене виникла ця проблема із службою, яку я розгортав, і жодна з інших пропозицій щодо цього питання не спрацювала. У моєму випадку це було тому, що мій файл .config (xml) був недійсним. Я зробив помилку копіювання та вставки під час копіювання з кваліфікації в прод.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.