Prozessabfrage im Netzwerk

Lodrik23

Quest-Mob
Registriert
23.01.2008
Beiträge
59
Reaktionspunkte
0
Kommentare
4
Buffs erhalten
3
hey

Ich hoffe hier kann mir jmd von euch helfen. Folgendes Problem:

Ich möchte in einem Netzwerk bestehend aus einem Master Pc (mit bildschirm etc) und 8 CLienst Pc's(nur rechner ohne alles) vom Master Pc aus überprüfen ob bestimmte Prozesse auf den Client Pcs ausgeführt werden.

Da ich schon ein paar andere Sachen für diesen Verbund mit Vb 2008 programmiert habe wäre es schön wenn jmd eine Lösung in Vb 2008 hat. Mein Code zum Abfragen von Prozessen lautet

Dim p() As Process = Process.GetProcessesByName("notepad")
If p.Length > 0 then
MsgBox("Prozess aktiv")
else
MsgBox("Prozess nicht Aktiv")
End If

so wie er aussieht geht er aber er Prüft eben nur die Prozesse auf dem Pc wo das Programm ausgeführt wird.

Ich hoffe mir kann da jmd helfen

Mfg

Lodrik23
 
Hmm na wenn du schon Netzwerksachen in VB geschrieben hast solltest Du vllt dem Code auch iwie noch sagen, dass er im Netzwerk sucht. Allerdings bezweifle ich mal, dass es so einfach geht wie in deinem Code dargestellt. Ich kann ja ma gucken.
 
Zuletzt bearbeitet von einem Moderator:
direkt per vb hab ich noch nicht für netzwerksachen programmiert sondern wenn nur sachen lokal auf dem Master aufgerufen
 
Achso..naja das ist ja auch kein hit. Schau doch mal ob dich das weiterbringt:
http://glengamoi.com/forums/p/5284/17653.aspx

Darüber kannst Du dich vllt erstmal an das Problem rantasten. Ich glaube kaum, dass es hier bei buffed.de Viele gibt die Dir helfen können
smile.gif
 
mmh ich guggs mir mal habs auch schon in nem Vb forum gepostet aber da konnte bisher auch niemand helfen
 
Du brauchst einen Code, der durch die laufenden Prozesse iteriert und den Prozess zurückliefert, den suchst. Da ich kein VB programmiere, jedoch C(++) und Delphi, hier ein Codeschnipsel in C:

Code:
PROCESSENTRY32 GetProcessID (char *ProcessExe) {
	HANDLE aSnapshotHandle;
	PROCESSENTRY32 aProcessEntry32;
	BOOL bContinue;

	aSnapshotHandle = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
	aProcessEntry32.dwSize = sizeof (aProcessEntry32);
	
	bContinue = Process32First (aSnapshotHandle, &aProcessEntry32);
	while (bContinue) {
		if (strpos (strlower (aProcessEntry32.szExeFile), strlower (ProcessExe)) != -1)
			return aProcessEntry32;
		bContinue = Process32Next (aSnapshotHandle, &aProcessEntry32);
	}

	CloseHandle (aSnapshotHandle);
	aProcessEntry32.th32ProcessID = 0;
	return aProcessEntry32;
}
Der Typ PROCESSENTRY32 ist aus der Windows API (ToolHelp32), steht also auch unter VB zur Verfügung.

Verwendet wird der Code wie folgt:
Code:
PROCESSENTRY32 MyProcess;

MyProcess = GetProcessID("notepad.exe");
if (MyProcess.th32ProcessID) {
  // Prozess gefunden
}

Wie du das übers Netzwerk machst, ist eine andere Geschichte. Dafür gibts auch zig Möglichkeiten.

Tante Edith meint grad:

Ok, das Netzwerk scheint dein Hauptproblem zu sein. Hast du denn schon festgelegt, wie du das Kommunizieren willst? Per HTTP? Per Sockets?

Am einfachsten wäre die Kombination HTTP + PHP, wo du einfach einen HTTP Request hinschickst und das Ergebnis auswertest. Dazu muß aber auf jedem Client ein HTTP Server mit PHP laufen (IIS oder Apache).

Per Sockets, also per TCP-Winsock-Kommunikation zwischen zwei Rechnern, wirds schwieriger, weil du hier ein ganzes Protokoll selber gestalten und dessen Kommunikationen umsetzen mußt. Da steckt zwar viel Stoff drin, den du dabei lernen kannst. Aber wenn's dir hier an Disziplin und Durchhaltevermögen mangelt, kann es sich zu einem Punkt entwickeln, wo du nicht weiterkommst, es dich frustriert und dir die Freude am Projekt nimmt.
 
Zuletzt bearbeitet von einem Moderator:
In C# würde das mit WMI ungefähr so aussehen:

[codebox] ConnectionOptions con = new ConnectionOptions();
con.Username = "Oliver";
con.Password = "Birnbaum";

ManagementScope scope = new ManagementScope("192.168.5.1", con);
ObjectQuery myQuery = new ObjectQuery("Select * from Win32_Process");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, myQuery);


foreach (ManagementObject obj in search.Get())
{
Console.WriteLine(obj["Name"].ToString());
}
Console.ReadLine();[/codebox]
 
Das fragt die Prozesse auf der Maschine 192.168.5.1 ab? Nice. Da ham'se ja schön was gekapselt.
biggrin.gif


Muß die Zielmaschine Vorraussetzungen erfüllen? Ab Vista? Windows 7? Weil "Select * from Win32_Process" schaut mir recht neu aus.
 
Zuletzt bearbeitet von einem Moderator:
mmh =) der grundgedanke an der ganzen sache ist folgender

Mit dem Programm das ich geschrieben habe kann ich die 8 client pcs hoch und runterfahren und neustarten. Dazu werden verschiedene Batchdateien aufgerufen die auf dem Master liegen. Nun soll noch eine Funktion rein mit der man überprüfen kann ob die 8 Clientpcs auch komplett hochgefahren sind. Da dachte ich mir eben das ich das prüfen kann in dem ich den Prozess der nach dem Start automatisch auf den Clientpcs gestartet wird abfrage.

Hat jmd vllt noch eine Idee wie ich überprüfen kann ob die Pcs hochgefahren sind?

Ps:

Auf allen pcs läuft windows xp 64bit
 
Zuletzt bearbeitet von einem Moderator:
Das fragt die Prozesse auf der Maschine 192.168.5.1 ab? Nice. Da ham'se ja schön was gekapselt.
biggrin.gif


Muß die Zielmaschine Vorraussetzungen erfüllen? Ab Vista? Windows 7? Weil "Select * from Win32_Process" schaut mir recht neu aus.

Dürfte mit sämtlichen neueren Betriebsystemen gehen. Du musst halt wissen, welche Zugriffsberechtigungen du brauchst.
Das kannst du mit dem Objekt vom Typ ConnectionOptions machen. Über die Properties kannst du alles mögliche mitgeben.

Ob der Rechner läuft sollte man mit dem WMI-Query "SELECT avaibility FROM Win32_Processor" prüfen können. Musst du halt im Code von mir oben austauschen. Die Portierung in VB sollte ja nicht schwer fallen.

Schau mal unter dieser URL http://msdn.microsoft.com/en-us/library/aa394373(VS.85).aspx

Da steht so einiges, was man abfragen kann. Der Code ist immer gleich aufgebaut, im Prinzip, wenn du über WMI Abfragen tätigst.
Und innerhalb eines Netzwerkes ist WMI für dich eigentlich die beste Lösung.

Wenn es über Internet gehen soll, dann musst du nen eigenen Server schreiben, der innerhalb des LAN's fungiert, dort dann die WMI-Daten anfrägt, in HTML formatiert und per HTTP an den Browser zurücksendet.

Sowas bastel ich mir gerade. Code könnte ich dir schicken, allerdings nur C#.
 
Zurück