Vérifier si un processus est en cours d'exécution sur un système distant à l'aide de C#
Je suis en train de vérifier si un processus est en cours d'exécution sur un système distant. Je suis en utilisant le code suivant:
string procSearc = "notepad";
string remoteSystem = "remoteSystemName";
Process[] proce = System.Diagnostics.Process.GetProcessesByName(procSearch, remoteSystem);
Cependant, lorsque j'essaie d'exécuter le code, j'obtiens l'erreur suivante: "impossible de se connecter à la machine à distance."
Je suis capable de courir pslist avec la commande suivante:
C:>pslist \remoteSystemName
Donc, je sais qu'il est possible d'obtenir les informations dont j'ai besoin, mais j'en ai besoin dans le code.
Une autre possibilité serait d'intégrer pslist en C# et de recherche de la liste pour voir si le processus est là, mais je n'ai pas trouvé d'informations sur la façon de le faire.
OriginalL'auteur | 2009-05-14
Vous devez vous connecter pour publier un commentaire.
Utiliser le
System.ServiceProcess.ServiceController
classe pour un service. Vous pouvez utiliserStatus
de vérifier si elle est en cours d'exécution et leStop()
etStart()
pour le contrôler.Lorsque j'exécute le code ci-dessus, j'obtiens un message indiquant: Impossible d'ouvrir le bloc-notes de service sur l'ordinateur nom de l'ordinateur. Je suis en train de vérifier le processus, ce qui semble être le contrôle d'un service. Peut-il faire les deux?
Je ne pensais pas à ce qui n'est pas un service... je suis pas sûr que je vous ai donné une bonne réponse.
Je viens de tester mon code avec notpad sur une machine distante et a reçu le même message que vous avez obtenu. J'ai couru votre code sans erreurs. Comment êtes-vous en cours d'exécution de votre code? Avez-vous accès à la machine distante. Je sais que je suis un administrateur local sur l'ordinateur distant j'ai testé avec.
Ci-dessous est ce que j'ai fait, et il est de travail. Merci pour votre aide.
OriginalL'auteur Larry Hipp
Ci-dessous est ce que j'ai fait pour obtenir que cela fonctionne:
D'abord j'ai ajouté une référence à System.ServiceProcess et a ajouté: en utilisant le Système.ServiceProcess;
OriginalL'auteur
L'intérieur Exception dire "Accès Refusé"?
Une question similaire peut aider, il mentionne avoir besoin d'être dans le Moniteur de Performances, le groupe d'Utilisateurs.
GetProcessesByName() et Windows Server 2003 tâche planifiée
OriginalL'auteur Crispy
J'ai pensé lors de l'exécution de l'application en elle-même, je voudrais obtenir une exception fenêtre, car les exceptions n'ont pas été traitées dans mon code...
Là, j'ai vu la raison dans la stacktrace: accès refusé. La raison en est que l'utilisateur qui exécute le programme qui a été l'appel de la .NET méthode pour obtenir la liste des processus ne faisait pas partie du "Moniteur de Performances des Utilisateurs" groupe de la machine distante.
Après que j'ai eu une autre exception en disant que le suivi de la performance du service n'était pas en cours d'exécution sur la machine distante. J'ai donc commencé le service correspondant à l'ordinateur distant et le tour est joué, il a travaillé!
C'était à l'aide d'un client Windows 7 en essayant d'obtenir la liste des processus d'un Serveur Windows 2008.
OriginalL'auteur ohgodnotanotherone
Tuer le processus à distance
J'ai trouvé que le Processus.Kill() la méthode ne fonctionne pas lorsque le Processus.MachineName a été créé, voici donc une solution pour tuer le processus à distance, espérons que cela aide les autres.
La méthode d'extension pour créer la méthode: KillRemoteProcess
Et bien sûr la méthode pour trouver les processus et de consommer l'KillRemoteProcess
OriginalL'auteur Nick Prozee