Fehler 5: Zugriff beim Starten des Windows-Dienstes verweigert

97

Ich erhalte diese Fehlermeldung, wenn ich versuche, einen Windows-Dienst zu starten, den ich in C # erstellt habe:

Alt-Text

Mein Code bisher:

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

Update Nr. 1

Ich habe das oben genannte Problem gelöst, indem ich dem Konto NETWORK SERVICE Berechtigungen erteilt habe, aber jetzt habe ich ein anderes Problem:

Alt-Text

Update Nr. 2

Der Dienst kann nicht gestartet werden. System.InvalidOperationException: Der Dienst 'RightAccessManagementWcf.RightAccessWcf' hat keine Anwendungsendpunkte (ohne Infrastruktur). Dies kann daran liegen, dass für Ihre Anwendung keine Konfigurationsdatei gefunden wurde oder dass in der Konfigurationsdatei kein mit dem Dienstnamen übereinstimmendes Dienstelement gefunden wurde oder dass im Dienstelement keine Endpunkte definiert wurden. unter System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (Beschreibung der Servicebeschreibung) unter System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (Beschreibung der Servicebeschreibung, ServiceHostBase serviceHost) unter System.ServiceModel.ServiceHost) TimeSpan-Zeitlimit) bei System.ServiceModel.Channels.CommunicationObject.

Kris-I
quelle
2
Ihr zweites Problem ist allein mit dieser Nachricht nicht einfach zu lösen. Sie müssen in Ihren Ereignisprotokollen nachsehen, was der eigentliche Fehler ist.
Matt Ellen
1
Überprüfen Sie, ob das Systemkonto Zugriff auf den Ordner hat.
Entwickler

Antworten:

116

Mir ist klar, dass dieser Beitrag alt ist, aber es gibt keine markierte Lösung, und ich wollte nur einwerfen, wie ich das gelöst habe.

Der erste Error 5: Access DeniedFehler wurde behoben, indem dem NETWORK SERVICEKonto Berechtigungen für das Ausgabeverzeichnis erteilt wurden .

Der zweite Started and then stoppedFehler scheint eine generische Meldung zu sein, wenn der Dienst fehlerhaft ist. Überprüfen Sie die Ereignisanzeige (insbesondere die 'Windows-Protokolle> Anwendung') auf die tatsächliche Fehlermeldung.

In meinem Fall war es eine schlechte Dienstkonfigurationseinstellung in app.config.

Justin Skiles
quelle
7
Ich habe die Berechtigungen geändert, indem ich mit dem Explorer zum Ordner navigiert, mit der rechten Maustaste auf Eigenschaften, Sicherheit geklickt und dann dem NETWORK SERVICE-Konto in der Liste der Benutzernamen die richtigen Berechtigungen zugewiesen habe.
Justin Skiles
In meinem Fall zu "Fehler 5" hatte der Netzwerkdienst keine Zugriffsrechte auf den Ordner der ausführbaren Datei. Da es sich um eine Entwicklungsversion handelt, wollte ich die Dateien nicht in den Ordner Programmdatei, sondern in einen freigegebenen Ordner legen, in den ich Dateien vom Entwicklungscomputer kopieren konnte. Es sollte gut genug sein, dem Netzwerkdienst die Rechte zum Lesen / Ausführen / Auflisten zu geben.
ZZZ
5
Ich füge LOCAL SERVICE "und" NETWORK SERVICE "zu meinem Ordner bin \ Debug hinzu und arbeite, danke!
Hernaldo Gonzalez
3
Nur ein Hinweis für Personen: Wenn das Ändern von Berechtigungen Ihr Problem nicht behebt, überprüfen Sie die Ereignisanzeige auf Fehler. Ich hatte einen völlig unabhängigen SQL-Fehler, der den Start des Dienstes verhinderte, mir aber dennoch den Fehler "Fehler 5: Zugriff verweigert" gab. Error.
Dtryan
Vielen Dank für den Hinweis zu "Ereignisanzeige" - genau wie bei mir, nicht verwandter Fehler "Endpunkt nicht gefunden", aber als "Zugriff verweigert (5)" getarnt.
getarnt
26

Computer -> Verwalten -> Dienst -> [Ihr Dienst] Eigenschaften. Dann die Registerkarte mit den Kontoinformationen. Spielen Sie mit diesen Einstellungen, z. B. führen Sie den Dienst mit einem Administratorkonto aus.

Das hat es für mich getan.

BEARBEITEN: Was auch das Problem sein kann, ist, dass die meisten Dienste als LOCAL SERVICEoder LOCAL SYSTEMKonten ausgeführt werden. Wenn Sie nun C:/my-admin-dir/service.exemit diesen Konten arbeiten, diese jedoch nichts in diesem Verzeichnis ausführen dürfen, erhalten Sie error 5. Suchen Sie also die ausführbare Datei des Dienstes, RMB das Verzeichnis -> Eigenschaften -> Sicherheit und stellen Sie sicher, dass sich das Konto, mit dem der Dienst ausgeführt wird, in der Liste der Benutzer befindet, die die volle Kontrolle über das Verzeichnis haben dürfen.

Mike de Klerk
quelle
21

Das hat bei mir funktioniert.

  1. Klicken Sie mit der rechten Maustaste auf den Ordner der obersten Ebene, der die ausführbare Dienstdatei enthält. Gehen Sie zu Eigenschaften
  2. Gehen Sie zur Registerkarte "Sicherheit"
  3. Klicken Sie auf "BEARBEITEN"
  4. Klicken Sie auf "HINZUFÜGEN"
  5. Geben Sie den Namen "SYSTEM" ein und klicken Sie auf OK
  6. Markieren Sie SYSTEM user und klicken Sie auf das Kontrollkästchen ALLOW neben "Full control".
  7. Klicken Sie zweimal auf OK
cmcginty
quelle
11
"SYSTEM" hat bei mir nicht funktioniert, ich habe nur gespielt und "SERVICE" ausprobiert - das hat den Trick gemacht.
Exter
4
Das Hinzufügen von "SERVICE" und "Full Control" funktionierte für mich - Windows 10.
Fredrik
Da die Account-Eigenschaft meines ServiceProcessInstaller (in meinem ProjectInstaller) auf LocalService festgelegt wurde, habe ich dem Local Service-Konto die vollständigen Berechtigungen erteilt, und das hat den Trick getan!
Dave
14

Ich habe auch den gleichen Fehler erhalten, der durch Klicken mit der rechten Maustaste auf Dienst> Eigenschaften> Anmelden> Anmelden als: Lokales Systemkonto behoben wurde.

Asmita Chavan
quelle
Vielen Dank. Ich hatte ein Problem mit dem Start von tor.exe --service und jetzt funktioniert es wie ein Zauber!
Arman Karimi
Hat für mich gearbeitet. Gibt es jedoch eine Möglichkeit, dies programmgesteuert festzulegen?
Sisir
Verstanden. Klicken Sie mit der rechten Maustaste auf serviceProcessInstaller -> Eigenschaften -> Konto und setzen Sie es auf "LocalSystem" anstelle des Standardbenutzers "Benutzer". Installieren Sie den Dienst und voila.
Sisir
10

Path to executableStellen Sie sicher, dass die Punkte auf eine tatsächlich ausführbare Datei verweisen (Rechtsklick auf Dienst -> Eigenschaften -> Registerkarte Allgemein). Über Powershell (und sc.exe) können Sie einen Dienst installieren, ohne auf eine tatsächlich ausführbare Datei zu verweisen ... ähm.

Aage
quelle
Ich habe dort versehentlich einen Ordner anstelle einer EXE-Datei gelassen. Um dieses Problem zu beheben, musste ich "sc delete servicenameXYZ" + Server neu starten, um den Dienst vollständig zu löschen und die richtige .exe-Datei des Dienstes neu zu installieren. Dann fängt es wie ein Zauber an. Vielen Dank für diesen Beitrag.
Honza P.
Du hast mich gerettet! Zuweisen eines Ordners anstelle des ausführbaren vollständigen Pfads ... Arghhhh! Sollte ausgesehen haben besser ...
ilter
9

Ich habe die Lösung:

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"

Jetzt können Sie versuchen, den Dienst zu starten.

John
quelle
1
Ich habe bereits "Lokales Systemkonto" ausgewählt und erhalte immer noch die Nachricht.
user2568374
4

In meinem Fall wurde folgendes nicht überprüft.

Geben Sie hier die Bildbeschreibung ein

Akshay Anand
quelle
2
Für andere Leser wie mich: Dieser Screenshot ist Teil des Service-Eigenschaften-Fensters! Öffnen Sie das Fenster Dienste (Ausführen: services.msc) und wählen Sie Eigenschaften aus dem Kontextmenü, das angezeigt wird, nachdem Sie mit der rechten Maustaste auf den Dienst geklickt haben!
MohaMad
4

Ich habe diesen Fehler erhalten, weil ich die akzeptierte Antwort von hier falsch gelesen habe: Windows-Dienst aus ausführbarer Datei erstellen .

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

Für <path_to_service_executable>, war ich mit dem Pfad des Ordners ausführbaren Datei, zB C:\Folder.

Es muss der Pfad der ausführbaren Datei sein , z C:\Folder\Executable.exe.

Jamie Butterworth
quelle
3

Für mich - der Ordner, aus dem der Dienst ausgeführt werden sollte, und die darin enthaltenen Dateien wurden mit der Windows-Option "Verschlüsseln" verschlüsselt. Entfernen Sie das und - voila!

Nicholas Blumhardt
quelle
Dies stellte sich für mich als Problem heraus - die Clown-Systemadministratoren auf dem von mir verwendeten Server hatten einen Knopf gedreht, damit alle Verzeichnisse standardmäßig mit NTFS-Verschlüsselung ausgestattet sind, und daher verfügt LocalSystem nicht über den Verschlüsselungsschlüssel, um sie zu lesen ...
KJ Tsanaktsidis
3

Dieser Fehler tritt auf, wenn in Ihrer OnStartMethode ein Fehler vorliegt . Sie können einen Host nicht direkt in der OnStartMethode öffnen, da er beim Aufruf nicht geöffnet wird, sondern auf das Steuerelement wartet. Sie müssen also einen Thread verwenden. Das ist mein Beispiel.

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();
    }
}
Santhosh
quelle
3

Wenn Ihnen der Fehlercode 5 für den Zugriff verweigert wird, versucht Ihr Dienst wahrscheinlich in Ihrem Code, mit einigen Dateien im System zu interagieren, z. B. in eine Protokolldatei zu schreiben

Öffnen Sie die log onRegisterkarte zum Auswählen der Diensteigenschaften und aktivieren Sie die Option, damit der Dienst mit dem Desktop interagieren kann. Klicken Sie auf Dienst zulassen, um mit dem Desktop zu interagieren

Kudzai Zishumba
quelle
3

Eine der Ursachen für diesen Fehler sind unzureichende Berechtigungen (authentifizierte Benutzer) in Ihrem lokalen Ordner. So erteilen Sie die Berechtigung für "Authentifizierte Benutzer" Öffnen Sie die Registerkarte "Sicherheit" in den Eigenschaften Ihres Ordners, bearbeiten und fügen Sie die Gruppe "Authentifizierte Benutzer" hinzu und übernehmen Sie die Änderungen.

Sobald dies erledigt war, konnte ich Dienste sogar über ein Netzwerkdienstkonto ausführen (zuvor konnte ich nur mit einem lokalen Systemkonto ausgeführt werden).

Vijay kumar.S
quelle
2

Ich hatte Windows-Service mit OWIN und TopShelf gehostet. Ich konnte es nicht starten. Gleicher Fehler - "Zugriff verweigert 5"

Am Ende gab ich alle Perms für meinen Bin / Debug.

Das Problem wurde immer noch nicht gelöst.

Also habe ich mir die Ereignisprotokolle angesehen und es stellte sich heraus, dass die Microsoft.Owin.Host.HttpListenernicht in der Klassenbibliothek enthalten war, die die OWIN-Startklasse enthielt.

Stellen Sie daher sicher, dass Sie das Ereignisprotokoll überprüfen, um die Grundursache zu ermitteln, bevor Sie sich mit Dauerwellen usw. befassen.

SO Benutzer
quelle
2
Guter Punkt - Der Fehler "Zugriff verweigert" hat möglicherweise nichts mit Berechtigungen zu tun. Überprüfen Sie immer das Anwendungsprotokoll in der Ereignisanzeige.
Mhenry1384
Hallo, ich überprüfe auch dies, wo ist der Pfad ". \ logs", den ich vom obersten Regal aus anmelde, aber er ist nicht da
Transformator
1

Ihr Code wird möglicherweise im Sicherheitskontext eines Benutzers ausgeführt, der keinen Dienst starten darf.

Da Sie WCF verwenden, schätze ich, dass Sie sich im Kontext von NETWORK SERVICE befinden.

Siehe: http://support.microsoft.com/kb/256299

Shiraz Bhaiji
quelle
1
Ich habe "LOCAL SERVICE" und "NETWORK SERVICE" Rechte für meine Ausgabeverzeichnisse vergeben
Kris-I
Sie müssen auch Gruppenrichtlinien für Systemdienste
festlegen
1

Verwenden Sie im Service Installer das LocalSystem-Konto anstelle des LocalService-Kontos.

Sie können dies entweder tun, indem Sie die Entwurfsansicht Ihres Service-Installationsprogramms
wie folgt ändern: Eigenschaften des Service Process Installer -> Konto auf LocalSystem setzen.

oder indem Sie unten die Datei designer.cs Ihres Service-Installationsprogramms ändern:

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

Klicken Sie mit der rechten Maustaste auf die serviceDatei in service.msc und wählen Sieproperty .

Sie sehen einen Ordnerpfad unter Path to executableC: \ Benutzer \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Navigieren Sie zu C: \ Users \ Me \ Desktop \ project \ Tor und klicken Sie mit der rechten Maustaste auf Tor.

Wählen Sie property, security, editund dann add. LOCAL SERVICEKlicken Sie im Textfeld auf OK, und aktivieren Sie das KontrollkästchenFULL CONTROL

Klicken Sie adderneut auf und geben Sie ein NETWORK SERVICE, klicken Sie ok, aktivieren Sie das KontrollkästchenFULL CONTROL

Klicken Sie dann auf OK (unten)

MagTun
quelle
1

In meinem Fall musste ich 'Authentifizierte Benutzer' in die Liste der 'Gruppen- oder Benutzernamen' in dem Ordner aufnehmen, in dem die ausführbare Datei installiert wurde.

Sankar
quelle
0

Werfen Sie einen Blick auf Process Utilities > Process monitorvon http://www.sysinternals.com .

Mit diesem Tool können Sie überwachen, was ein Prozess tut. Wenn Sie diesen Serviceprozess überwachen, sollte irgendwo ein Zugriff verweigert werden und auf welcher Ressource der Zugriff verweigert wird.

Pieter van Ginkel
quelle
0

Für den Fehler 5 habe ich das Gegenteil der obigen Lösung getan. "Der erste Fehler 5: Zugriff verweigert Der Fehler wurde behoben, indem dem NETWORK SERVICE-Konto Berechtigungen für das Ausgabeverzeichnis erteilt wurden."

Ich habe mein Konto in ein lokales Konto anstelle eines Netzwerkdienstkontos geändert, und da ich als Administrator angemeldet war, hat es funktioniert

Chris
quelle
0

Wenn dieser Fehler auf einem Server auftritt, versuchen Sie, Zugriff auf den Ordner zu gewähren, in dem Sie die echte Windows-Dienst-Exe erhalten haben. Sie sollten zur Registerkarte Sicherheit gehen und den lokalen Dienst als Benutzer auswählen und vollen Zugriff gewähren. Sie sollten das gleiche auch für die Exe tun.

Darshana
quelle
0

Ich habe sppsvc.exe mithilfe des Prozessmonitors überwacht und festgestellt, dass versucht wurde, in den Schlüssel HKEY_LOCAL_MACHINE \ SYSTEM \ WPA zu schreiben. Nachdem ich NETWORK SERVICE Berechtigungen für diesen Schlüssel erteilt hatte, konnte ich den Dienst starten und Windows erkannte plötzlich, dass er wieder aktiviert wurde.

Guilherme Noronha
quelle
0

Ich habe versehentlich meinen Dienst so eingestellt, dass er ausgeführt wird, da die Local serviceLösung darin besteht, zu wechselnLocal System

meda
quelle
0

Nachdem ich meine Hatte ein paar Stunden lang gegen meinen Schreibtisch geschlagen hatte, um das herauszufinden, wurde meine "Haupt" -Methode irgendwie von ihrem Code geleert!

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

Andere Lösungen, die ich gefunden habe:

  • Aktualisieren des .NET Frameworks auf 4.0
  • Stellen Sie sicher, dass der Dienstname in InitializeComponent () mit der Eigenschaft des Installationsdienstnamens übereinstimmt

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • Und ein netter Server-Neustart tut nicht weh

Szhlopp

Szhlopp
quelle
0

In diesem Fall hat das System keinen freien Speicherplatz mehr auf der lokalen Festplatte.

Alexander Puchkov
quelle
0

Ich hatte dieses Problem heute bei einem Dienst, den ich entwickelte, und keiner der anderen Vorschläge zu dieser Frage hat funktioniert. In meinem Fall hatte ich eine fehlende DLL-Abhängigkeit in dem Ordner, von dem aus der Dienst ausgeführt wurde.

Als ich die Abhängigkeiten hinzufügte, verschwand das Problem.

Frank Bryce
quelle
0

In meinem Fall habe ich das Projekt auf dem Desktop belassen und um auf den Desktop zugreifen zu können, müssen wir dem Ordner Berechtigungen hinzufügen, sodass ich meinen Projektordner einfach in das Verzeichnis C: \ verschoben habe. Jetzt funktioniert es wie ein Zauber.

Ali786
quelle
0

Ich weiß nicht, ob meine Antwort für viele sinnvoll wäre, aber auch ich hatte das gleiche Problem und die Lösung war unglaublich einfach. Ich musste lediglich das Programm öffnen, mit dem ich den Code als Administrator ausgeführt habe. (Rechtsklick -> Als Administrator ausführen).

Das war alles.

Rai
quelle
0

Wie aus dem Fehler-Popup hervorgeht, hängt dies mit der Berechtigung zusammen. Führen Sie den Dienst also als "LocalSystem" -Konto aus.

Um dasselbe zu tun, klicken serviceProcessInstaller -> Properties -> AccountSie mit "LocalSystem"der rechten Maustaste auf und setzen Sie es auf anstelle der Standardeinstellung "User". Installieren Sie den Dienst und voila.

Sisir
quelle
Dies ist eine bewährte Lösung und keine Umgehung. Kann der Down-Wähler bitte den Grund der Abneigung erklären, damit andere verstehen
Sisir
0

Überprüfen Sie das Windows-Ereignisprotokoll auf detaillierte Fehlermeldungen. Ich habe das gleiche Problem behoben, nachdem ich das Ereignisprotokoll überprüft hatte.

Amrik Singh
quelle
-1

Ich hatte dieses Problem bei einem Dienst, den ich bereitstellte, und keiner der anderen Vorschläge zu dieser Frage funktionierte. In meinem Fall lag es daran, dass meine .config (xml) nicht gültig war. Ich habe beim Kopieren von qualif nach prod einen Fehler beim Kopieren und Einfügen gemacht.

SabineA
quelle