Ich erhalte diese Fehlermeldung, wenn ich versuche, einen Windows-Dienst zu starten, den ich in C # erstellt habe:
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:
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.
quelle
Antworten:
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 Denied
Fehler wurde behoben, indem demNETWORK SERVICE
Konto Berechtigungen für das Ausgabeverzeichnis erteilt wurden .Der zweite
Started and then stopped
Fehler 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.
quelle
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 SERVICE
oderLOCAL SYSTEM
Konten ausgeführt werden. Wenn Sie nunC:/my-admin-dir/service.exe
mit diesen Konten arbeiten, diese jedoch nichts in diesem Verzeichnis ausführen dürfen, erhalten Sieerror 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.quelle
Das hat bei mir funktioniert.
quelle
Ich habe auch den gleichen Fehler erhalten, der durch Klicken mit der rechten Maustaste auf Dienst> Eigenschaften> Anmelden> Anmelden als: Lokales Systemkonto behoben wurde.
quelle
Path to executable
Stellen 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.quelle
Ich habe die Lösung:
Jetzt können Sie versuchen, den Dienst zu starten.
quelle
In meinem Fall wurde folgendes nicht überprüft.
quelle
Ich habe diesen Fehler erhalten, weil ich die akzeptierte Antwort von hier falsch gelesen habe: Windows-Dienst aus ausführbarer Datei erstellen .
Für
<path_to_service_executable>
, war ich mit dem Pfad des Ordners ausführbaren Datei, zBC:\Folder
.Es muss der Pfad der ausführbaren Datei sein , z
C:\Folder\Executable.exe
.quelle
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!
quelle
Dieser Fehler tritt auf, wenn in Ihrer
OnStart
Methode ein Fehler vorliegt . Sie können einen Host nicht direkt in derOnStart
Methode ö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.quelle
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 on
Registerkarte zum Auswählen der Diensteigenschaften und aktivieren Sie die Option, damit der Dienst mit dem Desktop interagieren kann.quelle
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).
quelle
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.HttpListener
nicht 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.
quelle
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
quelle
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:
quelle
Klicken Sie mit der rechten Maustaste auf die
service
Datei in service.msc und wählen Sieproperty
.Sie sehen einen Ordnerpfad unter
Path to executable
C: \ Benutzer \ Me \ Desktop \ project \ Tor \ Tor \ tor.exeNavigieren Sie zu C: \ Users \ Me \ Desktop \ project \ Tor und klicken Sie mit der rechten Maustaste auf Tor.
Wählen Sie
property
,security
,edit
und dannadd
.LOCAL SERVICE
Klicken Sie im Textfeld auf OK, und aktivieren Sie das KontrollkästchenFULL CONTROL
Klicken Sie
add
erneut auf und geben Sie einNETWORK SERVICE
, klicken Sieok
, aktivieren Sie das KontrollkästchenFULL CONTROL
Klicken Sie dann auf OK (unten)
quelle
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.
quelle
Werfen Sie einen Blick auf
Process Utilities > Process monitor
von 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.
quelle
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
quelle
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.
quelle
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.
quelle
Ich habe versehentlich meinen Dienst so eingestellt, dass er ausgeführt wird, da die
Local service
Lösung darin besteht, zu wechselnLocal System
quelle
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!
Andere Lösungen, die ich gefunden habe:
Stellen Sie sicher, dass der Dienstname in InitializeComponent () mit der Eigenschaft des Installationsdienstnamens übereinstimmt
Und ein netter Server-Neustart tut nicht weh
Szhlopp
quelle
In diesem Fall hat das System keinen freien Speicherplatz mehr auf der lokalen Festplatte.
quelle
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.
quelle
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.
quelle
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.
quelle
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 -> Account
Sie mit"LocalSystem"
der rechten Maustaste auf und setzen Sie es auf anstelle der Standardeinstellung"User"
. Installieren Sie den Dienst und voila.quelle
Überprüfen Sie das Windows-Ereignisprotokoll auf detaillierte Fehlermeldungen. Ich habe das gleiche Problem behoben, nachdem ich das Ereignisprotokoll überprüft hatte.
quelle
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.
quelle