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.
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é!
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
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