Nous utilisons l'objet ServiceController pour savoir si notre service est en cours d'exécution ou non. Notre application Web qui exécute la requête utilise Impersonation pour la sécurité/connexion.Demande d'un état du service Windows en C# sur une application Web
System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("myService");
return sc.Status
En utilisant un compte Administrateur, la requête aboutit. En utilisant un compte limité (non-administrateur), la requête échoue avec un message de "Service myService introuvable sur l'ordinateur". '"... MAIS cela échoue uniquement dans Windows Server 2003 et pas dans Windows XP. Je l'ai googlé et vérifié dans MSDN.
Je n'ai trouvé rien lié à l'utilisation de ServiceController dans Windows Server 2003.
Des idées?
EDIT: S'il existe un moyen d'interroger l'état du service sans utiliser le ServiceController qui n'implique pas de privilèges de "sécurité", cela pourrait fonctionner pour nous. Nous avons juste besoin d'obtenir le statut du service.
MISE À JOUR:
J'ai créé une application simple de la console qui permet d'imprimer l'état du service. J'ai utilisé la commande "runas" pour exécuter l'application en utilisant les comptes Administrateur et Non-Administrateur. Cela a fonctionné dans Windows Server 2003 ... Cela signifie que c'est un problème de privilège qui n'est pas transmis correctement à l'appel ServiceController dans l'application Web? IIS sécurité choses peut-être?
Merci!
une autre alternative serait pour le service de mettre à jour une base de données/fichier texte, puis interroger à partir de votre application web? De cette façon, vous n'auriez jamais à vous soucier des permissions, surtout si vous deviez le déplacer vers un autre serveur, etc ... – seanxe
Bonne solution! – Ian
Une autre chose est de vérifier les journaux d'événements Windows pour voir si des messages liés à la sécurité spécifiques sont là. –