2010-06-08 14 views
18

J'essaie de contrôler les services Windows installés sur un ordinateur distant. J'utilise la classe ServiceController.Comment contrôler à distance un service Windows avec ServiceController?

J'ai ceci:

ServiceController svc = new ServiceController("MyWindowsService", "COMPUTER_NAME"); 

Avec cela, je peux obtenir l'état du service Windows comme ceci:

string status = svc.Status.ToString(); 

Mais je ne peux pas contrôler le service Windows (en faisant svc.Start(); ou svc.Stop();). je reçois l'exception suivante:

Impossible d'ouvrir le service Servicexxx sur ordinateur 'COMPUTER_NAME'

C'est normal, je suppose qu'il ya quelque chose à voir avec les droits d'accès. Mais comment? J'ai regardé dans Google mais je n'ai pas trouvé ce que je cherchais. Cependant, je lis souvent quelque chose lié à l'usurpation d'identité, mais je ne sais pas ce que cela signifie. NB: Les ordinateurs locaux et distants exécutent tous les deux Win XP Pro.

Répondre

8

Problème résolu. L'usurpation d'identité consiste à exécuter un morceau de code à l'aide d'une connexion/mot de passe donné. J'ai trouvé ce projet très utile: http://www.codeproject.com/KB/cs/svcmgr.aspx?display=Print qui m'a beaucoup aidé!

+2

Ceci est un trou de sécurité inutile. Si l'utilisateur de cette application doit avoir l'accès, ils doivent avoir les informations d'identification et se connecter en tant que cet utilisateur. Plus important encore, ils devraient juste avoir les autorisations attribuées à un groupe dont ils sont membres. Cela ne résout pas le problème, c'est une solution de contournement non sécurisée. Voir la réponse de Hans Passant et les commentaires associés. – majinnaibu

7

Démarrer et arrêter des services est une opération hautement privilégiée, normalement réservée aux administrateurs. Assurez-vous que le compte d'utilisateur que vous utilisez dispose de privilèges suffisants sur la machine cible. Poser des questions à ce sujet à serverfault.com

0

Afin de résoudre le problème, donnez votre nom les permissions d'administrateur sur l'ordinateur/serveur distant comme domain/username et vous pourrez exécuter le paquet avec succès puisque j'avais le même problème et quand j'ai donné des permissions à mes propres services étaient accessibles sur le serveur distant