Autor Beitrag
woge1011
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 11.02.15 09:07 
Hallo Liebe Forenmitglieder,

ich habe viele Foren durchsucht, aber leider keine passende Hilfestellung finden können. Deswegen versuche ich es mal hier:

Ich möchte mit Hilfe von C#.NET auf einem Remote-Computer die Prozess-Liste auslesen und benutze dafür die GetProcesses-Funktion. Leider scheitert diese, sobald ich als Übergabeparamter einen Servernamen oder eine IP eintrage:
Process[] remoteAll = Process.GetProcesses("ComputerName");
Auch eine Verbindung mit dem Computername "localhost" scheitert. Ich erhalte immer die folgende Fehlermeldung:
System.InvalidOperationException wurde nicht von Benutzercode behandelt.
Message=Mit dem Remotecomputer konnte keine Verbindung hergestellt werden.
Source=System
StackTrace:
bei System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine)
bei System.Diagnostics.ProcessManager.GetProcessInfos(String machineName)
bei System.Diagnostics.Process.GetProcesses(String machineName)
bei Collector_Redundancy_Switch.Program.observing() in C:\Users\TestA_MES_GW\documents\visual studio 2010\Projects\Collector_Redundancy_Switch\Collector_Redundancy_Switch\Program.cs:Zeile 58.
bei Collector_Redundancy_Switch.Program.Timer1s.PressureEvent(Object sender, ElapsedEventArgs args) in C:\Users\TestA_MES_GW\documents\visual studio 2010\Projects\Collector_Redundancy_Switch\Collector_Redundancy_Switch\Program.cs:Zeile 193.
bei Collector_Redundancy_Switch.Program.Timer1s.<.ctor>b__0(Object sender, ElapsedEventArgs args) in C:\Users\TestA_MES_GW\documents\visual studio 2010\Projects\Collector_Redundancy_Switch\Collector_Redundancy_Switch\Program.cs:Zeile 176.
bei System.Timers.Timer.MyTimerCallback(Object state)
InnerException: System.InvalidOperationException
Message=Es konnten keine Prozessinformationen vom Leistungsindikator abgerufen werden.
Source=System
StackTrace:
bei System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
bei System.Diagnostics.NtProcessManager.GetProcessInfos(String machineName, Boolean isRemoteMachine)
InnerException: System.ComponentModel.Win32Exception
Message=Der Netzwerkpfad wurde nicht gefunden
Source=System
ErrorCode=-2147467259
NativeErrorCode=53
StackTrace:
bei System.Diagnostics.PerformanceMonitor.Init()
bei System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
bei System.Diagnostics.NtProcessManager.GetProcessInfos(PerformanceCounterLib library)
InnerException:


Komischerweise kann ich über die Konsole mit dem Befehl "tasklist" auf dem Remote-Computer alle Prozesse auslesen.

Kann mir jemand irgendeinen Ansatz vorschlagen, wie ich dem Problem auf die Schliche kommmen kann?

Vielen Dank im Voraus!

mfg
woge1011
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4423
Erhaltene Danke: 903


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 11.02.15 10:57 
Die Doku besagt das Process.GetProcesses die PerformanceCounter API benutzt und deine Exception besagt das diese API auf dem anderen Rechner nicht zugreifbar ist. Ein relevanter Test ob das was du willst geht wäre also nicht Tasklist sondern eher ob die Leistungsüberwachung(perfmon) auf den Remote Rechner zugreifen kann.

Übliche Probleme sind hier beschrieben.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4009
Erhaltene Danke: 824

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mi 11.02.15 11:17 
Hallo und :welcome:

laut Process.GetProcesses gibt es die InvalidOperationException nur bei Zugriff auf ältere Windows-Versionen. Welche Windows-Version ist denn auf dem anderen Rechner drauf?
Aber zumindestens "." für Zugriff auf den lokalen Rechner sollte funktionieren - ansonsten ist eher etwas bei der Konfiguration deines Rechners nicht in Ordnung.

Alternativ könntest du aber auch mal versuchen, direkt per P/Invoke darauf zuzugreifen:
WTSEnumerateProcesses (für Zugriff auf einen anderen Server müßtest du dir das Handle vorher per WTSOpenServer holen).
woge1011 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 11.02.15 11:46 
Hallo und Vielen Dank schon mal,

Ihr habt mir super schnell geholfen. Es lag natürlich daran, dass ich den Remoteregistrierungsdienst auf dem Remoteserver nicht aktiviert hatte. Nach dem Starten desselben lief sofort alles.


user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:

Aber zumindestens "." für Zugriff auf den lokalen Rechner sollte funktionieren - ansonsten ist eher etwas bei der Konfiguration deines Rechners nicht in Ordnung.

Ich hatte den lokalen Rechner immer mit "localhost" versucht anzusprechen - das ging auch nicht, aber mit "." konnte ich den Befehl lokal ausführen.


Ich bin positiv angetan von diesem kompetenten Forum und die schnellen Reaktionen und werde bestimmt nochmal vorbeischauen :-).

Gruß,
woge1011