Überprüfen Sie, ob ein Prozess ausgeführt wird, auf einem remote-system mit C#
Ich versuche zu prüfen, ob ein Prozess ausgeführt wird, auf einem remote-system. Ich bin mit dem folgenden code:
string procSearc = "notepad";
string remoteSystem = "remoteSystemName";
Process[] proce = System.Diagnostics.Process.GetProcessesByName(procSearch, remoteSystem);
Jedoch, wenn ich versuche den code auszuführen, bekomme ich folgende Fehlermeldung: "Konnte keine Verbindung zum remote-Rechner."
Ich bin in der Lage, führen Sie durch pslist mit dem folgenden Befehl:
C:>pslist \remoteSystemName
Also ich weiß, dass es möglich ist, um die Informationen, die ich brauche, aber ich brauche es in den code.
Andere Möglichkeit wäre die Integration pslist in C# und suchen Sie aus der Liste, um zu sehen, wenn der Prozess da ist, aber ich habe keine Informationen gefunden, wie dies zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
System.ServiceProcess.ServiceController
Klasse für einen Dienst. Sie könnenStatus
um zu überprüfen, ob es läuft und dieStop()
undStart()
zu kontrollieren.Unten ist das, was ich Tat, um diese zu arbeiten:
Zuerst habe ich einen Verweis auf System.ServiceProcess und fügte hinzu: using System.ServiceProcess;
Nicht die Ausnahme-sagen "Zugriff Verweigert"?
Einer ähnlichen Frage helfen kann, es erwähnt, dass in der Gruppe Systemmonitorbenutzer.
GetProcessesByName() und Windows Server 2003 geplanten task
Ich dachte mir, wenn die Anwendung ausgeführt selbst würde ich eine Ausnahme Fenster, denn Ausnahmen wurden nicht bearbeitet in meinem code...
Dort sah ich den Grund in der stacktrace: Zugriff verweigert. Der Grund war, dass der Benutzer, der das Programm, den Aufruf der .NET-Methode auf, um die Prozess-Liste, war nicht Teil der "Performance Monitor Users" Gruppe der remote-Maschine.
Danach bekam ich eine weitere Ausnahme sagen, dass die performance-monitoring-Dienst nicht ausgeführt wurde, auf der remote-Maschine. Also startete ich den entsprechenden Dienst auf dem remote-computer, und voila, es funktionierte!
Dieser wurde mit einem Windows 7-client zu versuchen, um die Prozess-Liste von einer Windows-2008-Server.
Töten remote-Prozess
Ich fand, dass der Prozess.Die Kill() Methode funktioniert nicht, wenn der Prozess.Die MachineName-Eigenschaft festgelegt wurde, also hier ist eine Lösung für die Tötung der Prozess aus der Ferne, hoffe es hilft anderen.
Der Erweiterung Methode erstellen Methode: KillRemoteProcess
Und natürlich ist die Methode, um die Prozesse und verbrauchen die KillRemoteProcess
Können Sie versuchen, die Identität der Benutzer, die Zugriff auf den remote-server.
https://docs.microsoft.com/en-us/dotnet/api/system.security.principal.windowsimpersonationcontext?redirectedfrom=MSDN&view=netframework-4.7.2
Nach Identitätswechsel, werden Sie nicht mehr treffen, der Fehler.
Auch, stellen Sie sicher, dass es das Vertrauen zwischen den Domänen, sonst Identitätswechsel wird nicht funktionieren.
LogonUser funktioniert nur für meine domain