Starten von remote-Prozesse in einem Windows-Netzwerk
Ich habe mehrere slave-Maschinen und eine master-Maschine, die zusammen eine verteilte Anwendung. Prozesse auf jedem slave-Rechner einen GUI-und Netzwerk-Zugang (ich glaube, es würde als ein interaktiver Prozess dann). Für die Benutzerfreundlichkeit wäre es schön, wenn die master-Maschine könnte starten/stoppen der Prozesse auf diesen slave-Maschinen.
Meine erste Idee war der Einsatz von WMI und der Win32_Process-Klasse zum starten einer remote-Prozess, aber bei der weiteren Untersuchung war es reveiled, dass Prozesse, die auf diese Weise gestartet werden, sind nicht interaktiv und isoliert, und somit kann keine GUI. Ein Hinweis sagt, dass man nutzen kann, Win32_ScheduledJob.Erstellen Sie zum erstellen einer remote-interaktiver Prozess, aber es läuft unter dem Konto "LocalSystem" ausgeführt, die ich gerne vermeiden möchte (auch, konnte ich gar nicht bekommen, es richtig zum laufen).
Was wären gute Möglichkeiten, um dieses problem zu lösen?
Vielleicht ist es möglich, starten Sie eine Hilfsanwendung, die wiederum startet eine ordnungsgemäße Prozess, aber das scheint mir ziemlich dreckig.
Edit: PsExec war wirklich klobig, wenn ich es versuchte und langsam wie die Hölle (nicht sicher, warum). Suche weiter bei PsExec scheint es, es installiert einen temporären Dienst auf dem remote-Computer, um die Anwendung zu starten. Wäre dies der einzige Weg, um zu laichen einen interaktiven Prozess über eine eigene Identität? Sollte ich einen Helfer-service in der setup für den Knoten? Aber selbst dann würde, wie ich mit ihm kommunizieren dann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
PsExec ist Teil der sysinternals-suite, die das tun können
http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
Wenn Ihr Server unter windows 2008 können Sie auch
Terminal Services, Remote App
Können Sie das "at" - Befehl.
Öffnen Sie eine Befehlszeile und geben Sie
In der Klemme. Der einzige Nachteil ist, dass die Zeit auf dem remote-system muss innerhalb eines angemessenen delta von dir. Es ist auch nicht instant. Sie haben ein paar Sekunden warten, um sicherzustellen, dass die remote-scheduler nicht versäumen das Ereignis völlig.
Es ist ein WMI entspricht, und hat die gleiche grundlegende Vorsichtsmaßnahmen wie bei:
LISTING 3: Code für die Erstellung einer Interaktiven Prozess unter Windows Server 2003, Windows XP und Win2K SP3 Maschinen
Ich denke, die meisten anderen Möglichkeiten, es zu tun (ohne Installation Ihren eigenen service) ausgeschaltet wurden, die von verschiedenen service packs wegen Sicherheitslücken.
Den beiden folgenden post verwenden .NET zum ausführen von remote-Prozessen.
Mithilfe von WMI
http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---start-a-process-on-remote-machine-passing-credentials_2E00_.aspx
Codeproject Beispiel
http://www.codeproject.com/KB/IP/RemotingExec.aspx
Den Beispielen ausführen, benutzerdefinierte Anmeldeinformationen & remote-executable ist eine Win-Form-app.
Hoffe, das hilft.
Wenn die enire Gruppe einigermaßen unter Ihrer Kontrolle, kann es möglich sein, die Umsetzung dieser remote-Prozesse als Windows-Dienste. Ein service, das interaktiv sein kann (nicht standardmäßig, obwohl) und es kann ferngesteuert werden über den standard-Service Control Manager läuft auf jedem Windows-PC.
Darf ich Fragen, warum die slave-Prozesse brauchen, um eine GUI? Ich habe ein ähnliches set up, sondern benötigt eine GUI nur bei der ersten Einrichtung.
Anyway, hier ist was ich getan habe, aber leider es setzt auf den Prozess läuft als LocalSystem-Konto, die ich verstehe, dass Sie versuchen zu vermeiden, wenn Sie wirklich brauchen, die GUI.
Geben Sie ein wenig der hintergrund, die Anwendung, die ich hatte, zu verteilen war Hudson, und dies war eine frühere version, wo die Art und Weise, die Sie verteilen, ist es durch ausführen einer Java-WebStart-Anwendung, und damit die Notwendigkeit für eine GUI (zumindest beim set-up, um Hilfe bei der Fehlerbehebung).
Was ich Tat, war das einrichten der slave-Anwendungen als Dienste auf dem slave-Computer mit sc.exe (das ist ein PITA zu bekommen Recht, zum Glück nur einmal gemacht werden). Etwas entlang der Linien von:
Beachten Sie die Leerzeichen nach den Parametern (binPath= usw.), die notwendig sind. Beachten Sie auch, dass ich fand es einfacher, um die drop "type= interact" und ändern Sie manuell in der service-Konsole.
Dann auf den master, auch mit sc.exe starte ich den Dienst per Remote-Zugriff:
Und verifiziert, dass das Programm ausgeführt wurde, auf die slave-Maschinen.
Nun, in meinem Fall, ich habe nicht wirklich brauchen, die GUI, andere als für die erste Fehlersuche. Sobald ich alles richtig läuft, habe ich einfach konfiguriert den Dienst für die Ausführung als service-Konto, aber nicht mehr im interaktiven Modus.
Ich hoffe, Sie finden dies hilfreich.
Gibt es ein paar Komponenten, die Sie gehen zu müssen, um dies zu verwirklichen.
Zunächst müssen Sie eine Methode der Kommunikation mit der remote-Maschine.
Zweiten, müssen Sie etwas auf dem remote-Computer hören können, starten Sie Ihre Anwendung.
Den anderen obigen Vorschläge alle etwas gebaut-in für eine oder beide dieser Komponenten, was in Ordnung ist, so lange die Einschränkungen des gegebenen Lösungen sind angemessen.
PsExec sieht aus wie der vielversprechendsten, out-of-the-box-Lösung. Andernfalls können Sie Rollen Sie Ihre eigene app zu hören, um einfache Nachrichten über TCP/named pipes/was auch immer und nur spawn entsprechenden sub-Prozesse. Der einzige Nachteil mit diesem ist, Sie werden wollen, Recht vorsichtig, um die Sicherheit, insbesondere, wenn eine der Maschinen sind der öffentlichkeit ausgesetzt.
Ist die PSTools-suite von Sysinternals entwickelte und war so groß, dass das Unternehmen von Microsoft gekauft, einige Zeit später. Mit diesen tools ist der beste Weg zu erreichen, Ihre Aufgabe.
Sehe ich Sie erwähnt ein problem mit der Ausführung von Anwendungen interaktiv. Kann ich empfehlen die Verwendung der Schalter /i, um die Anwendung auszuführen interaktiv. PSTools bietet alle Funktionen, die Sie suchen. Sie müssen nur zu spielen, um mit den Schaltern zu erhalten Ihren gewünschten Ergebnis.
Habe ich noch nie erlebt die Langsamkeit, die Sie beschreiben, in meinen Anwendungen verwenden PSTools.
MPICH2 wird Häufig in High-Performance-Computing-Cluster und sollte in der Lage sein, das zu tun, was Sie wollen. Auch wenn Sie nicht verwenden es für die Weitergabe der Nachrichten zwischen den Maschinen, die Sie verwenden können, seine Prozess-launcher starten, alle Prozesse von der master-Maschine. Es kann eingerichtet werden, authentifizieren sich als Sie einen bestimmten Windows-Benutzer auf die Maschinen.