Wie zum Starten/Stoppen eines Windows-Service aus einer ASP.NET app - Security-Themen
Hier mein Windows/.NET security stack:
- Ein Windows-Dienst als LocalSystem ausgeführt auf einem Windows Server 2003-box.
- Ein .NET 3.5-Website auf der gleichen box laufen, unter "default" Produktion server-IIS-Einstellungen (also wahrscheinlich als NETZWERKDIENST Benutzer?)
Auf meinem VS2008 Standard DEV-Umgebung habe ich diese eine Methode, die aufgerufen wird, aus der ASP.NET app, die gut funktioniert:
private static void StopStartReminderService() {
ServiceController svcController = new ServiceController("eTimeSheetReminderService");
if (svcController != null) {
try {
svcController.Stop();
svcController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
svcController.Start();
} catch (Exception ex) {
General.ErrorHandling.LogError(ex);
}
}
}
Wenn ich dieses auf den Produktions-server, bekomme ich die folgende Fehlermeldung von der ServiceController:
Quelle: System.ServiceProcess ->
System.ServiceProcess.ServiceController -> IntPtr
GetServiceHandle(Int32) -> System.InvalidOperationException Meldung:
Kann nicht öffnen Sie eTimeSheetReminderService-Dienst auf computer '.'.
Warum passiert das, und wie behebe ich es?
EDIT:
Die Antwort ist unten, meist in den Kommentaren, aber zu klären:
- Wurde das Thema Sicherheit im Zusammenhang, und ist aufgetreten, weil das NETZWERKDIENST-Konto nicht über ausreichende Rechte zum Starten/Stoppen eines service
- Ich erstellt einen Lokalen Benutzer-Account, und fügte zu der PowerUsers-Gruppe (diese Gruppe hat fast-admin-Rechte)
- Ich will nicht meine ganzen Web-App zu imitieren, dass der Benutzer die ganze Zeit, so dass ich imitieren, nur in der Methode, wo ich manipulieren der service. Ich tun dies, indem Sie die folgenden Ressourcen, um mir zu helfen es im code:
MS KB-Artikel und dies, nur, um ein besseres Verständnis
HINWEIS: ich nicht imitieren, über das web.config habe ich es im code. Siehe MS KB-Artikel oben.
InformationsquelleAutor der Frage andy | 2009-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, dies auf Ihrer Website.Config.
InformationsquelleAutor der Antwort Phaedrus
Geben IIS Berechtigung zum starten/stoppen Sie einen besonderen service:
subinacl /service {yourServiceName} /grant=IIS_WPG=F
Diese Zuschüsse full-service-Kontrolle-Rechte für diesen besonderen service, um die built-in Gruppe IIS_WPG ist. (Dies funktioniert für IIS6 /Win2k3.) YMMV, die für neuere Versionen von IIS.)
InformationsquelleAutor der Antwort Martin_ATS
Dies war eine gute Frage, die fasziniert mich auch...
So, hier ist was ich getan habe um dieses problem zu lösen:
Schritt 3: Verwenden Sie Identitätswechsel Identitätswechsel für die Verwendung in Schritt 1 erstellt haben, zu starten und beenden Sie den Dienst
InformationsquelleAutor der Antwort 130nk3r5
Update für IIS 8 (vielleicht auch etwas früher)
Die usergroup IIS_WPG nicht mehr vorhanden ist. Es hat sich zu IIS_IUSRS.
Auch, zu starten, einen Dienst beenden, ist es nicht notwendig, die volle Berechtigungen (F). Berechtigungen zum starten, stoppen und anhalten eines Dienstes (OBEN) sollte ausreichend sein. Als solche sollte der Befehl sein:
Beachten Sie, dass Sie benötigen, um die Eingabeaufforderung (vorzugsweise erhöhten rechten auf als administrator ausführen), um
C:\Windows\System32
Ordner, bevor dieser Befehl ausgeführt wird.Stellen Sie außerdem sicher, dass Sie kopiert haben, die subinacl.exe Datei
C:\Windows\System32
aus dem installation-Verzeichnis, wenn es ein Fehler ist.InformationsquelleAutor der Antwort toing_toing
Nur eine Vermutung, aber es erscheint nicht bei mir der Fehler ist unbedingt im Zusammenhang mit der Sicherheit. Hast du den service mit dem gleichen Namen auf dem Produktions-server?
InformationsquelleAutor der Antwort cdonner
Wenn Ihre web-Anwendung wurde die Datenbank-und windows-Dienst zugreifen können, dann verwenden Sie das flag in der DB den Dienst neu zu starten. Im Dienst, kann man das Lesen-flag und neu starten, wenn nicht gebucht etc. Nur im Fall, wenn Sie können den code ändern, der service.
Wenn es Drittanbieter-Dienst, können Sie Ihre eigenen windows-Dienst und verwenden Sie Datenbank-config zu Steuern, (neu -) Dienste. Es ist der sichere Weg, und gibt Ihnen viel mehr Flexibilität und Sicherheit.
InformationsquelleAutor der Antwort Alex