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;
}
Ich habe das Problem gelöst, indem ich dem Konto NETWORK SERVICE Berechtigungen erteilte.
Dienst kann nicht gestartet werden. System.InvalidOperationException: Der Dienst 'RightAccessManagementWcf.RightAccessWcf' hat keine Endpunkte für die Anwendung (keine Infrastruktur). Dies kann daran liegen, dass für Ihre Anwendung keine Konfigurationsdatei gefunden wurde, oder dass kein mit dem Servicenamen übereinstimmendes Serviceelement in der Konfigurationsdatei gefunden wurde oder weil im Serviceelement keine Endpunkte definiert waren. at System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (Beschreibung der ServiceDescription) at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (ServiceDescription-Beschreibung, ServiceHostBase-ServiceHost) at System.ServiceModel.ServiceHostBase.InitializeRuntime () at System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan-Timeout) at System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan-Timeout) bei RightAccessHosting.RightAccessHost.OnStart (String [] args) in C:\Benutzer ....
Ich weiß, dass dieser Beitrag alt ist, aber es gibt keine markante Lösung, und ich wollte nur einbringen, wie ich das gelöst habe.
Der erste Error 5: Access Denied
-Fehler wurde behoben, indem dem NETWORK SERVICE
-Konto Berechtigungen für das Ausgabeverzeichnis erteilt wurden.
Der zweite Started and then stopped
-Fehler scheint eine generische Nachricht zu sein, wenn der Dienst durch etwas beschädigt wurde. Überprüfen Sie die Ereignisanzeige (insbesondere "Windows-Protokolle> Anwendung") auf die tatsächliche Fehlermeldung.
In meinem Fall war dies eine falsche Konfigurationseinstellung für Dienste in app.config.
Computer -> Verwalten -> Service -> [Ihr Service] -Eigenschaften ..__ Die Registerkarte mit den Kontoinformationen. Spielen Sie mit diesen Einstellungen, z. B. den Dienst mit einem Administratorkonto ausführen oder so.
Das hat es für mich getan.
BEARBEITEN: Das Problem kann auch sein, dass die meisten Dienste als LOCAL SERVICE
oder LOCAL SYSTEM
-Konten ausgeführt werden. Wenn Sie nun C:/my-admin-dir/service.exe
mit diesen Konten ausführen, diese jedoch keine Elemente in diesem Verzeichnis ausführen dürfen, erhalten Sie error 5
. Suchen Sie 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 über vollständige Kontrolle über das Verzeichnis verfügen.
Das hat bei mir funktioniert.
Ich habe auch den gleichen Fehler erhalten, der durch .__ gelöst wurde. Klicken Sie mit der rechten Maustaste auf Service> Eigenschaften> Anmelden> melden Sie sich an als: Lokales Systemkonto.
Stellen Sie sicher, dass Path to executable
auf eine tatsächliche ausführbare Datei verweist (klicken Sie mit der rechten Maustaste auf Dienst -> Eigenschaften -> Registerkarte Allgemein). Über Powershell (und sc.exe) können Sie einen Dienst installieren, ohne auf eine ausführbare Datei zu verweisen.
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.
Dieser Fehler tritt auf, wenn Ihre OnStart
-Methode einen Fehler enthält. Sie können einen Host nicht direkt in der OnStart
-Methode öffnen, da er beim Aufruf nicht wirklich geöffnet wird. Du musst also einen Thread benutzen. 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();
}
}
wenn Sie einen Zugriffcode mit verweigertem Fehlercode 5 haben, versucht Ihr Dienst möglicherweise in Ihrem Code, mit einigen Dateien im System zu interagieren, z
Öffnen Sie die Diensteigenschaften. Wählen Sie die Registerkarte log on
aus, und aktivieren Sie die Option, damit der Dienst mit dem Desktop interagieren kann
Für mich - der Ordner, von dem aus der Dienst ausgeführt werden soll, und die darin enthaltenen Dateien wurden mit der Windows-Option "Verschlüsseln" verschlüsselt. Das entfernen und - voila!
Eine Ursache für diesen Fehler sind unzureichende Berechtigungen (authentifizierte Benutzer) in Ihrem lokalen Ordner. Um die Berechtigung für "Authentifizierte Benutzer" zu erteilen. Öffnen Sie die Registerkarte "Sicherheit" in den Eigenschaften Ihres Ordners. Gruppe und Änderungen übernehmen.
Sobald dies erledigt war, konnte ich Dienste auch über das Netzwerkdienstkonto ausführen (zuvor konnte ich nur mit dem lokalen Systemkonto ausgeführt werden).
Ich hatte Windows-Dienst mit OWIN und TopShelf gehostet. Ich konnte es nicht starten. Gleicher Fehler - "Zugriff verweigert 5"
Am Ende habe ich alle Perms für meine Bin/Debug gegeben.
Das Problem wurde immer noch nicht gelöst.
Also habe ich mir die Ereignisprotokolle angesehen und es stellte sich heraus, dass 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 Ursache zu ermitteln, bevor Sie mit Perms beginnen usw.
Verwenden Sie LocalSystem Account anstelle von LocalService Account in Service Installer .
Sie können dies tun, indem Sie die folgenden Änderungen in der Entwurfsansicht Ihres Service-Installationsprogramms vornehmen:
Eigenschaften des Service Process Installer -> Setzen Sie das Konto auf LocalSystem .
oder ändern Sie die folgenden Änderungen in der designer.cs-Datei Ihres Service-Installationsprogramms:
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Ihr Code wird möglicherweise im Sicherheitskontext eines Benutzers ausgeführt, der keinen Dienst starten darf.
Da Sie WCF verwenden, vermute ich, dass Sie sich im Zusammenhang mit NETWORK SERVICE befinden.
Klicken Sie mit der rechten Maustaste auf service
in service.msc und wählen Sie property
aus.
Unter Path to executable
sehen Sie einen Ordnerpfad wie C:\Users\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
, edit
und dann add
..__ aus. Geben Sie im Textfeld LOCAL SERVICE
ein, klicken Sie auf OK und aktivieren Sie das Kontrollkästchen FULL CONTROL
Klicken Sie erneut auf add
, geben Sie NETWORK SERVICE
ein, klicken Sie auf ok
, und aktivieren Sie das Kontrollkästchen FULL CONTROL
.
Klicken Sie dann auf OK (unten).
In meinem Fall musste ich "Authentifizierte Benutzer" in der Liste "Gruppen- oder Benutzernamen" in dem Ordner hinzufügen, in dem die ausführbare Datei installiert wurde.
Nachdem ich einige Stunden gegen meinen Schreibtisch geklopft hatte, als ich versuchte das herauszufinden, wurde meine "Main" -Methode irgendwie von ihrem Code geleert!
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new DMTestService()
};
ServiceBase.Run(ServicesToRun);
Stellen Sie sicher, dass der Dienstname in InitializeComponent () der Eigenschaft des Installer-Dienstnamens entspricht
private void InitializeComponent()
...
this.ServiceName = "DMTestService";
Und ein Nice-Server-Neustart tut nicht weh
Szhlopp
Ich habe sppsvc.exe mithilfe des Prozessmonitors überwacht und festgestellt, dass versucht wurde, 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 erneut aktiviert wurde.
In meinem Fall habe ich das Projekt auf dem Desktop aufbewahrt und um auf den Desktop zuzugreifen, müssen wir dem Ordner die Berechtigung hinzufügen, sodass ich meinen Projektordner einfach in das Verzeichnis C:\verschoben habe. Jetzt funktioniert es wie ein Zauber.
Ich hatte diese Ausgabe heute zu 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, ging das Problem weg.
Für den Fehler 5 habe ich das Gegenteil der obigen Lösung getan. "Der erste Fehler 5: Zugriff verweigert wurde behoben, indem dem NETWORK SERVICE-Konto Berechtigungen für das Ausgabeverzeichnis erteilt wurden."
Ich habe mein Konto in ein lokales Konto geändert und nicht als Netzwerkdienstkonto. Da ich als Administrator angemeldet war, funktionierte es
Schauen Sie sich Process Utilities > Process monitor
unter http://www.sysinternals.com an.
Mit diesem Tool können Sie die Aktivitäten eines Prozesses überwachen. Wenn Sie diesen Serviceprozess überwachen, sollte ein Zugriff irgendwo verweigert werden und auf welcher Ressource der Zugriff verweigert wird.
Wenn Sie diesen Fehler auf einem Server-Computer erhalten, geben Sie Zugriff auf den Ordner, in dem Sie das echte Windows-Dienstexe erhalten haben. Gehen Sie zur Registerkarte "Sicherheit", wählen Sie den lokalen Dienst als Benutzer aus und geben Sie vollständigen Zugriff. Sie sollten das gleiche auch für das Exe tun.
Ich habe diese Fehlermeldung erhalten, weil ich die akzeptierte Antwort 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>
verwendete ich den Pfad des Ordners der ausführbaren Datei, z. C:\Folder
.
Es muss der Pfad der ausführbaren Datei sein, z. C:\Folder\Executable.exe
.
Hoffentlich hilft das jemandem, der den gleichen dummen Fehler gemacht hat wie ich.
Ich weiß nicht, ob meine Antwort für viele sinnvoll wäre, aber auch ich war mit dem gleichen Problem konfrontiert und die Lösung war unglaublich einfach. Alles, was ich tun musste, war das Programm zu öffnen, mit dem ich den Code als Administrator ausgeführt habe. (Rechtsklick -> Als Administrator ausführen).
Das war alles.
In manchen Fällen hat der freie Speicherplatz auf der lokalen Festplatte nicht mehr genügend Platz.
Ich habe versehentlich eingestellt, dass mein Dienst ausgeführt wird, da Local service
die Lösung zu Local System
wechseln sollte
Wie aus dem Fehler-Popup hervorgeht, hängt dies mit der Berechtigung zusammen. Führen Sie den Dienst als "LocalSystem" -Konto aus.
Klicken Sie dazu mit der rechten Maustaste auf serviceProcessInstaller -> Properties -> Account
und setzen Sie ihn auf "LocalSystem"
anstatt auf den Standardwert "User"
. Installieren Sie den Dienst und voila.