web-dev-qa-db-fra.com

Comment contrôler à distance un service Windows avec ServiceController?

J'essaie de contrôler les services Windows installés sur un ordinateur distant. J'utilise la classe ServiceController.

J'ai ceci:

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

Avec cela, je peux obtenir le statut 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 l'ordinateur 'COMPUTER_NAME'

C'est normal, je suppose qu'il y a quelque chose à voir avec les autorisations d'accès. Mais comment? J'ai consulté 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.

18
Amokrane Chentir

Problème résolu.

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

8
Amokrane Chentir

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. Posez plus de questions à ce sujet sur serverfault.com

7
Hans Passant

Afin de résoudre le problème, donnez à votre nom les autorisations d'administrateur sur un ordinateur/serveur distant, tel que le domaine/nom d'utilisateur, et vous pourrez exécuter le package avec succès car j'avais le même problème et que, lorsque j'avais donné les autorisations nécessaires, mes autorisations étaient accessibles à distance. serveur

0
GOOKI