Voici ma pile de sécurité Windows/.NET:Comment démarrer/arrêter un service Windows à partir d'une application ASP.NET - Problèmes de sécurité
- Un service Windows en cours d'exécution en tant que LocalSystem sur un Windows Server 2003 boîte.
- Un site Web .NET 3.5 en cours d'exécution sur la même case, sous serveur de production « par défaut » paramètres IIS (donc probablement en tant qu'utilisateur NETWORKSERVICE?)
Sur mon environnement par défaut VS2008 DEV Je cette seule méthode, qui obtient appelé à partir de l'application ASP.NET, 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);
}
}
}
Quand j'exécuter sur le serveur de production, je reçois l'erreur suivante de la ServiceController:
Sourc e: System.ServiceProcess -> System.ServiceProcess.ServiceController -> IntPtr GetServiceHandle (Int32) -> System.InvalidOperationException Message: Impossible d'ouvrir le service eTimeSheetReminderService sur l'ordinateur '.'.
Pourquoi cela se produit-il et comment puis-je y remédier?
EDIT:
La réponse est ci-dessous, la plupart du temps dans les commentaires, mais de préciser:
- La question était liée à la sécurité, et eu lieu parce que le compte NETWORKSERVICE n'a pas eu suffisamment de droits Démarrer/Arrêter un service
- J'ai créé un compte d'utilisateur local et l'ai ajouté au groupe PowerUsers (ce groupe a presque les droits d'administrateur)
- Je ne veux pas toute mon application Web pour usurper l'identité de cet utilisateur tout le temps, donc j'emprunte l'identité seulement dans la méthode où je manipule le service. Je le fais en utilisant les ressources suivantes pour me aider à le faire dans le code:
MS KB article et this, just to get a better understanding
REMARQUE: Je n'usurper l'identité non pas par le web.config, je le fais dans le code. Voir l'article MS KB ci-dessus.
De quel type d'exception s'agissait-il? Une 'System.InvalidOperationException'? – Phaedrus
@Phaedrus: Hé, ouais, ouais c'était. J'ai mis plus d'informations sur les erreurs dans mon édition. acclame – andy