Błąd 5: Odmowa dostępu podczas uruchamiania usługi systemu Windows


97

Otrzymuję ten błąd, gdy próbuję uruchomić usługę systemu Windows utworzoną w języku C #:

tekst alternatywny

Mój kod do tej pory:

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;
}

Aktualizacja nr 1

Powyższy problem rozwiązałem nadając uprawnienia do konta USŁUGA SIECIOWA ale teraz mam kolejny problem:

tekst alternatywny

Aktualizacja nr 2

Nie można uruchomić usługi. System.InvalidOperationException: Usługa „RightAccessManagementWcf.RightAccessWcf” ma zerowe punkty końcowe aplikacji (niezwiązane z infrastrukturą). Może to być spowodowane tym, że nie znaleziono pliku konfiguracyjnego dla Twojej aplikacji lub nie można znaleźć elementu usługi pasującego do nazwy usługi w pliku konfiguracyjnym lub ponieważ w elemencie usługi nie zdefiniowano żadnych punktów końcowych. at System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (ServiceDescription description) at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (ServiceDescription description, ServiceHostBase serviceHost) at System.Service.Servize.Service (SystemService.Servize.Service (SystemService.Servize) TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.


2
Drugi problem nie jest łatwy do rozwiązania na podstawie samej wiadomości. Będziesz musiał zajrzeć do swoich dzienników zdarzeń i zobaczyć, jaki jest prawdziwy błąd.
Matt Ellen

1
Sprawdź, czy konto systemowe ma dostęp do folderu.
Deweloper

Odpowiedzi:


116

Zdaję sobie sprawę, że ten post jest stary, ale nie ma zaznaczonego rozwiązania i chciałem tylko wrzucić, jak to rozwiązałem.

Pierwszy Error 5: Access Deniedbłąd rozwiązano, nadając NETWORK SERVICEkontu uprawnienia do katalogu wyjściowego .

Drugi Started and then stoppedbłąd wydaje się być ogólnym komunikatem, gdy coś spowodowało błąd usługi. Sprawdź w Podglądzie zdarzeń (w szczególności „Dzienniki systemu Windows> Aplikacja”) pod kątem prawdziwego komunikatu o błędzie.

W moim przypadku było to złe ustawienie konfiguracji usługi w app.config.


7
Zmodyfikowałem uprawnienia, przechodząc do folderu za pomocą Eksploratora, klikając prawym przyciskiem myszy Właściwości, Zabezpieczenia, a następnie przypisując odpowiednie uprawnienia do konta USŁUGA SIECIOWA na liście nazw użytkowników.
Justin Skiles,

W moim przypadku „Błąd 5” to usługa sieciowa nie ma praw dostępu do folderu wykonywalnego. Ponieważ jest przeznaczony do programowania, nie chciałem umieszczać plików w folderze Program File, ale w folderze współdzielonym, do którego mogłem skopiować pliki z maszyny deweloperskiej. Nadanie usłudze sieciowej uprawnień do odczytu / wykonania / listy powinno być wystarczająco dobre.
ZZZ

5
Dodam

3
Tylko uwaga dla ludzi: jeśli zmiana uprawnień nie rozwiązuje problemu, koniecznie sprawdź przeglądarkę zdarzeń pod kątem błędów. Wystąpił całkowicie niezwiązany błąd SQL, który uniemożliwił uruchomienie usługi, ale nadal wyświetlał komunikat „Błąd 5: Odmowa dostępu”. błąd.
dtryan

Dziękuję za uwagę na temat „Przeglądarki zdarzeń” - to samo dotyczy mnie, niepowiązany błąd „Nie znaleziono punktu końcowego”, ale podszywający się pod „Odmowa dostępu (5)”
David Votrubec

26

Komputer -> Zarządzaj -> Usługa -> [Twoja usługa] właściwości. Następnie zakładka z informacjami o koncie. Graj z tymi ustawieniami, na przykład uruchamiaj usługę z kontem administratora.

To zrobiło to dla mnie.

EDYCJA: Problemem może być również to, że większość usług działa jako konta LOCAL SERVICElub LOCAL SYSTEM. Teraz, gdy uruchomisz C:/my-admin-dir/service.exete konta, ale nie mogą one wykonywać niczego w tym katalogu, otrzymasz error 5. Więc znajdź plik wykonywalny usługi, kliknij prawym przyciskiem myszy katalog -> Właściwości -> Zabezpieczenia i upewnij się, że konto, na którym usługa jest uruchamiana, znajduje się na liście użytkowników, którzy mogą mieć pełną kontrolę nad katalogiem.


21

To zadziałało dla mnie.

  1. Kliknij prawym przyciskiem myszy folder najwyższego poziomu zawierający plik wykonywalny usługi. Przejdź do Właściwości
  2. Przejdź do zakładki „Bezpieczeństwo”
  3. Kliknij „EDYTUJ”
  4. Kliknij „DODAJ”
  5. Wpisz nazwę „SYSTEM”, kliknij OK
  6. Podświetl użytkownika SYSTEM i kliknij pole wyboru ZEZWÓL obok „Pełna kontrola”
  7. Kliknij dwukrotnie OK

11
„SYSTEM” nie działał dla mnie, po prostu postawiłem na hazard i spróbowałem „SERWISU” - to załatwiło sprawę.
Exter

4
Dodanie „SERVICE” i nadanie mu „Pełna kontrola” działało u mnie - Windows 10.
Fredrik

Ponieważ moja właściwość konta ServiceProcessInstaller (w moim ProjectInstaller) została ustawiona na LocalService, przyznałem pełne uprawnienia kontu usługi lokalnej i to załatwiło sprawę!
Dave

14

Otrzymałem również ten sam błąd, rozwiązany przez kliknięcie prawym przyciskiem myszy na Usługa> Właściwości> Zaloguj się> zaloguj się jako: Lokalne konto systemowe.


Dzięki. Miałem problem z tor.exe - uruchomienie usługi, a teraz działa jak marzenie!
Arman Karimi,

Pracował dla mnie. Czy jednak istnieje sposób, aby określić to programowo?
Sisir

Rozumiem. Kliknij prawym przyciskiem myszy serviceProcessInstaller -> Właściwości -> Konto i ustaw je na „System lokalny” zamiast domyślnego „Użytkownik”. Zainstaluj usługę i voila.
Sisir

10

Upewnij się, że Path to executablewskazuje rzeczywisty plik wykonywalny (usługa kliknij prawym przyciskiem myszy -> Właściwości -> karta Ogólne). Za pomocą powershell (i sc.exe) możesz zainstalować usługę bez wskazywania rzeczywistego pliku wykonywalnego ... ahem.


Przypadkowo zostawiłem tam folder zamiast pliku .exe. Aby naprawić ten problem, musiałem "sc delete nazwa usługiXYZ" + zrestartować serwer, aby całkowicie usunąć usługę i ponownie zainstalować poprawny plik .exe usługi. Potem zaczyna się jak urok. Dzięki za ten post.
Honza P.

Uratowałeś mnie! Przypisywanie folderu zamiast pełnej ścieżki wykonywalnej ... Arghhhh! Powinienem był wyglądać lepiej ...
ilter

9

Mam rozwiązanie:

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"

teraz możesz spróbować uruchomić usługę.


1
Mam już wybrane „Lokalne konto systemowe” i nadal otrzymuję komunikat.
user2568374

5

Otrzymałem ten błąd, ponieważ źle odczytałem zaakceptowaną odpowiedź stąd: Utwórz usługę Windows z pliku wykonywalnego .

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

Dla <path_to_service_executable>używałem ścieżkę folderu wykonywalnego, np C:\Folder.

Musi to być ścieżka do pliku wykonywalnego , np C:\Folder\Executable.exe.


4

W moim przypadku nie sprawdzono następujących.

wprowadź opis obrazu tutaj


2
Dla innych czytelników, takich jak ja: Ten zrzut ekranu jest częścią okna właściwości usługi! Otwórz okno Usługi (Uruchom: services.msc) i wybierz Właściwości z menu kontekstowego, które pojawia się po kliknięciu usługi prawym przyciskiem myszy!
MohaMad

3

Dla mnie - folder, z którego miała być uruchomiona usługa, oraz zawarte w niej pliki zostały zaszyfrowane za pomocą opcji Windows „Szyfruj”. Usunięcie tego i - voila!


Okazało się, że to był problem dla mnie - administratorzy-klaunowie na serwerze, którego używałem, przekręcili pokrętło, aby wszystkie katalogi miały domyślnie szyfrowanie NTFS, więc LocalSystem w rzeczywistości nie ma klucza szyfrowania, aby je odczytać ...
KJ Tsanaktsidis

3

Ten błąd występuje, gdy w OnStartmetodzie wystąpił błąd . Nie można otworzyć hosta bezpośrednio w OnStartmetodzie, ponieważ w rzeczywistości nie otworzy się on po wywołaniu, ale zamiast tego będzie czekał na sterowanie. Musisz więc użyć wątku. To jest mój przykład.

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

jeśli masz odmowę dostępu o kodzie błędu 5. prawdopodobnie w Twoim kodzie usługa próbuje wchodzić w interakcję z niektórymi plikami w systemie, np. zapisując do pliku dziennika

otwórz właściwości usług wybierz log onzakładkę i zaznacz opcję zezwalającą usłudze na interakcję z pulpitem, kliknij zezwól usłudze na interakcję z komputerem


3

W moim przypadku musiałem dodać „Użytkownicy uwierzytelnieni” do listy „Nazwy grup lub użytkowników” w folderze, w którym zainstalowano plik wykonywalny.


3

Jedną z przyczyn tego błędu są niewystarczające uprawnienia (Użytkownicy uwierzytelnieni) w folderze lokalnym. Aby nadać uprawnienia „Uwierzytelnionym użytkownikom” Otwórz zakładkę zabezpieczeń we właściwościach swojego folderu, Edytuj i dodaj grupę „Użytkownicy uwierzytelnieni” i zastosuj zmiany.

Po wykonaniu tej czynności mogłem uruchamiać usługi nawet za pośrednictwem konta usługi sieciowej (wcześniej mogłem działać tylko z lokalnym kontem systemowym).


2

Miałem usługę Windows hostowaną przy użyciu OWIN i TopShelf. Nie mogłem go uruchomić. Ten sam błąd - „Odmowa dostępu 5”

Skończyło się na tym, że przekazałem wszystkie perms do mojego bin / Debug.

Problem nadal nie został rozwiązany.

Microsoft.Owin.Host.HttpListenerZajrzałem więc do logów zdarzeń i okazało się, że nie ma go w bibliotece klas zawierającej klasę startową OWIN.

Dlatego upewnij się, że sprawdziłeś dziennik zdarzeń, aby zidentyfikować główną przyczynę, zanim zaczniesz uzyskiwać uprawnienia itp.


2
Dobra uwaga - błąd „odmowa dostępu” może nie mieć nic wspólnego z uprawnieniami; zawsze sprawdzaj dziennik aplikacji w Podglądzie zdarzeń.
mhenry1384

cześć, sprawdzam również to, gdzie jest ścieżka `. \ logs` Loguję się do tego z górnej półki, ale jej tam nie ma
transformator


1

Użyj konta LocalSystem zamiast konta LocalService w Instalatorze usługi.

Można to zrobić, wykonując poniższe zmiany w widoku projektu instalatora usługi:
Właściwości instalatora procesu usługi -> Ustaw konto na system lokalny.

lub wykonując poniższą zmianę w pliku designer.cs instalatora usługi:

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

1

Kliknij prawym przyciskiem myszy serviceplik in service.msc i wybierz property.

Zobaczysz ścieżkę folderu pod Path to executabletaką jak C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Przejdź do C: \ Users \ Me \ Desktop \ project \ Tor i kliknij prawym przyciskiem myszy Tor.

Wybierz property, security, edita następnie add. W polu tekstowym wprowadź LOCAL SERVICE, kliknij OK, a następnie zaznacz poleFULL CONTROL

Kliknij addponownie, a następnie wprowadź NETWORK SERVICE, kliknij ok, zaznacz poleFULL CONTROL

Następnie kliknij ok (na dole)


0

Przyjrzeć się Process Utilities > Process monitorz http://www.sysinternals.com .

To narzędzie pozwala monitorować, co robi proces. Jeśli monitorujesz ten proces usługi, powinieneś zobaczyć gdzieś odmowę dostępu i na jakim zasobie jest udzielony odmowa dostępu.


0

Dla błędu 5 zrobiłem odwrotnie do powyższego rozwiązania. „Pierwszy błąd 5: błąd odmowy dostępu został rozwiązany przez przyznanie uprawnień do katalogu wyjściowego kontu usługi NETWORK SERVICE”.

Zmieniłem moje na konto lokalne, zamiast konta usługi sieciowej, a ponieważ byłem zalogowany jako administrator, zadziałało


0

Jeśli otrzymujesz ten błąd na serwerze, spróbuj udzielić dostępu do folderu, w którym masz prawdziwy exe usługi systemu Windows. Powinieneś przejść do zakładki bezpieczeństwa i wybrać usługę lokalną jako użytkownika i dać pełny dostęp. Powinieneś zrobić to samo dla exe.


0

Monitorowałem sppsvc.exe za pomocą monitora procesów i dowiedziałem się, że próbował on pisać do klucza HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. Po nadaniu uprawnień NETWORK SERVICE do tego klucza, mogłem uruchomić usługę i Windows nagle rozpoznał, że została ponownie aktywowana.


0

Przypadkowo uruchomiłem usługę, ponieważ Local servicerozwiązaniem było przejście naLocal System


0

Po kilku godzinach uderzania plecami w biurko, próbując to rozgryźć, w jakiś sposób moja metoda „główna” została opróżniona z kodu!

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

Inne rozwiązania, które znalazłem:

  • Aktualizacja .NET Framework do 4.0
  • Upewnij się, że nazwa usługi wewnątrz InitializeComponent () jest zgodna z właściwością nazwy usługi instalatora

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • A przyjemny restart serwera nie zaszkodzi

Szhlopp



0

Miałem dzisiaj ten problem w usłudze, którą opracowałem, i żadna z innych sugestii w tej kwestii nie zadziałała. W moim przypadku brakowało zależności .dll w folderze, z którego została uruchomiona usługa.

Kiedy dodałem zależności, problem zniknął.


0

W moim przypadku zachowałem projekt na pulpicie i aby uzyskać dostęp do pulpitu, musimy dodać uprawnienia do folderu, więc po prostu przeniosłem folder projektu do katalogu C: \, teraz działa jak urok.


0

Nie wiem, czy moja odpowiedź miałaby sens dla wielu, ale ja też stanąłem przed tym samym problemem, a rozwiązanie było skandalicznie proste. Wystarczyło, że otworzyłem program, którego użyłem do uruchomienia kodu jako administrator. (kliknij prawym przyciskiem myszy -> Uruchom jako administrator).

To było wszystko.


0

Jak sugeruje wyskakujące okienko błędu, jest to związane z uprawnieniami. Więc uruchom usługę jako konto „LocalSystem”.

Aby zrobić to samo, kliknij prawym przyciskiem myszy serviceProcessInstaller -> Properties -> Accounti ustaw "LocalSystem"zamiast domyślnego "User". Zainstaluj usługę i voila.


Jest to sprawdzona poprawka, która nie pozwala obejść. Czy ten, kto przegrał, może wyjaśnić przyczynę niechęci do zrozumienia innych
Sisir

0

sprawdź dziennik zdarzeń systemu Windows, aby uzyskać szczegółowy komunikat o błędzie. Rozwiązałem to samo po sprawdzeniu dziennika zdarzeń.


-1

Miałem ten problem z usługą, którą wdrażałem, i żadna z innych sugestii w tym pytaniu nie zadziałała. W moim przypadku było tak, ponieważ mój plik .config (xml) był nieprawidłowy. Zrobiłem błąd kopiowania i wklejania podczas kopiowania z Qualif do Prod.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.