2009-10-22 6 views
1

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!

+1

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

+0

Bonne solution! – Ian

+0

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à. –

Répondre

0

Je pensais que les applications Web sont supposées être exécutées dans un bac à sable. Autoriser l'accès au service s'exécutant sur un ordinateur local n'est pas vraiment ce que vous devriez faire, à cause de problèmes de sécurité. Peut-être pourriez-vous nous dire ce que vous voulez faire et il y a une autre solution?

Questions connexes