Laden...

Remoteprozess mit Nutzer des Remote-PC's abrufen

Erstellt von inflames2k vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.066 Views
inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 8 Jahren
Remoteprozess mit Nutzer des Remote-PC's abrufen

Hallo,

für ein aktuelles Projekt ist eine Überwachung von laufenden Prozessen zu implementieren. Darunter fallen auch Prozesse auf Remote-Hosts. Wie kann ich nun aber die Prozesse des Remotehosts abfragen? Oder anders, wie frage ich diese unter einem auf diesem registrierten Benutzer ab.

Mein erster Gedanke war, dies per Impersonation anzugehen. Allerdings schlägt dies fehl, wenn der vorgegebene Benutzer des Remotehosts auf dem lokalen Host nicht vorhanden ist.

Wie also kann ich nun einen Prozess vom Remotehost abfragen? WMI fällt auch aus mehreren Gründen raus und kann nicht verwendet werden.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

502 Beiträge seit 2004
vor 8 Jahren

Das geht u.U. mit den Methoden, die auch PSList nutzt - schau Dir mal das hier an...

Bart Simpson

Praxis ist wenn alles funktioniert und keiner weiss warum.
Theorie ist wenn man alles weiss, aber nichts funktioniert.

Bei uns wird Theorie und Praxis vereint: Nichts funktioniert und keiner weiss warum...

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 8 Jahren

Nö, PSList kann das auch nicht.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

C
1.214 Beiträge seit 2006
vor 8 Jahren

Ich denke, auch pslist basiert auf WMI.

Wenn die Rechner nicht in einer Domäne sind und der Benutzer auf dem anderen Rechner nicht vorhanden ist, fällt mir keine Möglichkeit ein, das mit Bordmitteln zu lösen. Du würst wohl einen Agent brauchen, der auf dem Rechner läuft.

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 8 Jahren

Naja,

für die Domain-Rechner funktioniert Impersonation. Also alles Prima. - Für nicht Domain-Rechner habe ich WNetAddConnection2 auf einigen Systemen erfolgreich getestet.

Eigentlich habe ich also sowohl für Domain- als auch nicht-Domain-Rechner eine Lösung. Wäre da nicht das Problem, dass Impersonation vom nicht Domain-Rechner zum Domain-Rechner nicht funktioniert und LogonUser mit Domain-Account ebenfalls nicht für diesen Fall funktioniert.

Eventuell hat ja noch jemand eine Idee, wie ich das am besten angehen könnte. Finde es schade, dass die Process-Klasse zwar die Möglichkeit bietet Prozesse eines Remote-Systems aufzulisten, aber keine Möglichkeit das unter bestimmtem Nutzer zu tun.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 8 Jahren

In Rücksprache mit dem Projektleiter setzen wir es so um, dass die Benutzer auf beiden Seiten bekannt sein müssen. - Somit hier erst einmal Fertig.

Allerdings wirft sich aus meinen Tests heraus eine neue Frage auf:

Ich impersoniere das Programm unter einem anderen Nutzer. Anschließend rufe ich mit Process.GetProcessesByName(Host) den Prozess / die Prozesse ab. Ändere ich nachträglich den Nutzer und führe die gleiche Prozedur erneut aus (ohne das Programm vorher zu neu zu starten), erhalte ich Prozessinformationen obwohl keine Verbindung mehr zum Remote-Rechner möglich sein sollte. Woran liegt das? Merkt sich die Process-Klasse irgendwo, dass bereits Zugriff bestand?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.827 Beiträge seit 2008
vor 8 Jahren

Du verwendest Impersonate für nen Process-Aufruf? 🤔
Wieso nicht einfach die StartInfo-Properties dafür verwenden? Dafür sind sie da.

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 8 Jahren

Entweder habe ich mich falsch ausgedrückt, oder du es falsch verstanden. Seis drum.

Nochmal grob erklärt was ich vorhabe:

Ich möchte prüfen ob ein bestimmter Prozess auf einem anderen Rechner läuft. Da der Nutzer, der die Prüfung anstößt vermutlich auf dem Zielsystem nicht existiert, sollen Benutzerdaten mitgegeben werden können.

Nach Rücksprache mit dem Projektleiter wird es so laufen, dass alle Systeme auf denen Prozesse geprüft werden sollen einen bestimmten Nutzer erhalten.

Die Prozesse werden mittels "Process.GetProcessesByName(string process, string machineName)" abgerufen. - Dies funktioniert nur mit Zugriffsberechtigungen. Daher wird der Nutzer impersoniert.

Das Problem was für mich jetzt noch bleibt, ist das bei Änderung der Nutzerdaten zur Laufzeit dennoch weiterhin die Prozesse abgerufen werden können obwohl der neue Nutzer auf dem Zielsystem nicht existiert.

Folgenden Code verwende ich:


using (Impersonator impersonator = new Impersonator(typedConfig.UserName, sDomain, typedConfig.GetDecryptedPassword()))
{
       this.CheckProcess();
}

Die Klasse Impersonator ist so implementiert, dass sie den Token im Dispose wieder freigibt. In der Methode CheckProcess wird die eigentliche Prüfung durchgeführt.

Komischerweise wird aber wie gesagt bei Änderung des Nutzers die CheckProcess-Methode erfolgreich durchlaufen, obwohl kein Zugriff sein dürfte.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |