Comment démarrer / arrêter un service Windows à partir d'une application ASP.NET - Problèmes de sécurité

Voici mon Windows/.FILET de sécurité de la pile:

  • Un Service Windows exécute en tant que système local sur un Serveur Windows 2003 boîte.
  • Un .NET 3.5 le Site web fonctionnant sur la même case, en vertu de l' "par défaut" serveur de production, les paramètres IIS (probablement en tant que service réseau de l'utilisateur?)

Sur mon défaut VS2008 environnement de DEV, j'ai cette méthode, qui est appelée à partir de la ASP.NET application, qui fonctionne très bien:

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

Lorsque je l'exécute sur le serveur de production, j'obtiens l'erreur suivante à partir de la ServiceController:

Source: Système D'.ServiceProcess ->
Système.ServiceProcess.ServiceController -> IntPtr
GetServiceHandle(Int32) -> Système.InvalidOperationException Message:
Ne peut pas ouvrir eTimeSheetReminderService service sur l'ordinateur '.'.

Pourquoi est-ce qui se passe, et comment puis-je résoudre ce problème?

EDIT:

La réponse est ci-dessous, pour la plupart, dans les commentaires, mais pour clarifier:

  1. Le problème était lié à la Sécurité, et s'est produite parce que le compte service réseau n'a pas de droits suffisants pour Démarrer/Arrêter un service
  2. J'ai créé un Compte d'Utilisateur Local, et de l'ajouter à la PowerUsers Groupe (ce groupe a près de droits d'administrateur)
  3. Je ne veux pas tout mon Web App pour usurper l'identité de cet utilisateur tous les temps, donc je usurper l'identité que dans la méthode où je manipule le service. J'ai ce faire, utilisez les ressources suivantes pour m'aider à le faire dans le code:

Article base de connaissances microsoft et ceci, juste pour obtenir une meilleure compréhension

REMARQUE: je n'ai pas usurper l'identité via le web.config, je le fais dans le code. Consultez l'Article base de connaissances microsoft ci-dessus.

source d'informationauteur andy