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:

  1. Wurde das Thema Sicherheit im Zusammenhang, und ist aufgetreten, weil das NETZWERKDIENST-Konto nicht über ausreichende Rechte zum Starten/Stoppen eines service
  2. Ich erstellt einen Lokalen Benutzer-Account, und fügte zu der PowerUsers-Gruppe (diese Gruppe hat fast-admin-Rechte)
  3. 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

Schreibe einen Kommentar