Frage

Ich habe mehr Slave-Maschinen und eine Master-Maschine, die zusammen eine verteilte Anwendung ausführen. Prozesse auf jeder Slave-Maschine haben eine GUI und Netzzugang haben (ich glaube, es würde einen interaktiven Prozess dann aufgerufen werden). Zum leichteren Verwendung wäre es schön, wenn die Master-Maschine starten könnte / die Prozesse auf diesen Slave-Maschinen stoppen.

Meine erste Idee war WMI und die Win32_Process Klasse zu verwenden, um einen Remote-Prozess zu starten, aber bei einer weiteren Untersuchung wurde Gelüftet, dass Prozesse auf diese Weise gestartet sind nicht interaktiv und isoliert, und somit keine GUI haben kann. Ein Hinweis besagt, dass ein Win32_ScheduledJob.Create kann einen Remote-interaktiven Prozess zu schaffen, aber es läuft unter dem Konto Local was ich vermeiden möchte (auch konnte ich nicht einmal bekommen, es richtig zu laufen).

Was würde gute Möglichkeiten, dieses Problem zu lösen? Vielleicht ist es möglich, eine Hilfsanwendung, die wiederum starten einen richtigen Prozess beginnt, aber das scheint ziemlich schmutzig.

Edit: PsExec war wirklich klobig, wenn ich es und langsam wie die Hölle versucht (nicht sicher, warum). Suchen Sie weiter auf PsExec es scheint einen temporären Dienst auf dem entfernten Rechner installiert die Anwendung zu starten. Wäre dies der einzige Weg, um einen interaktiven Prozess mit einer eigenen Identität zu laichen? Soll ich einen Helfer Dienst im Setup für den Knoten? Aber selbst dann, wie würde ich mit ihm kommunizieren dann?

War es hilfreich?

Lösung

PsExec ist Teil der Sysinternals Suite, die das

tun kann

http://technet.microsoft.com/en-us/sysinternals /bb897553.aspx

Wenn Ihre Server mit Windows 2008 Sie auch verwenden können,

Terminal Services Remote App

Andere Tipps

Sie können mit dem "at" -Befehl.

Öffnen Sie eine Befehlszeile und geben Sie

at /?

In den Terminals. Der einzige Nachteil ist, dass die Zeit auf dem Remote-System innerhalb eines angemessenen Deltas von Ihnen sein muss. Es ist auch nicht sofort. Sie müssen ein paar Sekunden warten, um die Remote-Scheduler stellen Sie sicher, das Ereignis nicht verpassen vollständig.

Es ist ein WMI-äquivalent dazu und hat die gleichen grundlegenden Einschränkungen wie unter:

LISTING 3: Code einen interaktiven Prozess zu erstellen, die auf Windows Server 2003, Windows XP und Win2K SP3 Maschinen

Const INTERVAL = "n"
Const MINUTES  = 1

strComputer = "compaq575"
strCommand  = "calc.exe"

Set objWMIService = _
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")

Set objSWbemDateTime = _
    CreateObject("WbemScripting.SWbemDateTime")
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _
    MINUTES, Now()))

intReturnValue = objScheduledJob.Create(strCommand, _
    objSWbemDateTime.Value, False, 0, 0, True, intJobID)
WScript.Echo "Job ID: " & intJobID

Ich denke, die meist anderen Möglichkeiten, es zu tun (ohne eigenen Service Installation) wurde von verschiedenem Service Pack wegen Schwachstellen ausgeschaltet.

Die folgenden zwei Post Verwendung .NET Remote-Prozesse auszuführen.

  1. Mit WMI

    http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---start-a-process-on-remote-machine-passing-credentials_2E00_.aspx

  2. Codeproject Beispiel

http://www.codeproject.com/KB/IP/RemotingExec.aspx

Die Beispiele ausführen mit benutzerdefinierten Anmeldeinformationen und der Fern ausführbar ist eine Win Form App. Hoffe, das hilft.

Wenn die enire Gruppe einigermaßen unter Kontrolle ist, kann es möglich sein, diese Remote-Prozesse als Windows-Dienste zu implementieren. Ein Dienst kann interaktiv sein (standardmäßig nicht though) und es kann aus der Ferne über die Standard-Service Control Manager gesteuert wird, laufen auf jedem Windows-PC.

Darf ich fragen, warum die Slave-Prozesse eine GUI haben müssen? Ich habe einen ähnlichen Satz, aber benötigt eine grafische Oberfläche nur während der Ersteinrichtung.

Wie auch immer, hier ist das, was ich getan habe, aber leider ist sie auf das Verfahren als das Konto Localsystem ausgeführt wird, das verstehe ich dich zu vermeiden sind versuchen, wenn Sie wirklich die GUI benötigen.

Sie ein wenig Hintergrund zu geben, die Anwendung, die ich verteilen musste, war Hudson , und diese eine frühere Version war, wo die Art und Weise Sie es verteilen ist durch eine Java WebStart Anwendung ausgeführt wird, und damit die Notwendigkeit für eine GUI (zumindest während des Einrichtens, zur Fehlerbehebung helfen).

Was ich tat, war die Slave-Anwendungen als Dienste auf den Slave-Maschinen durch den Einsatz sc.exe (das ist ein PITA ist richtig zu machen, zum Glück nur Sie dies tun, einmal) eingerichtet. Etwas entlang der Linien von:

sc.exe create SlaveService binPath= c:\path\to\slave.exe type= interact DisplayName= "The Slave Service"

Beachten Sie die Leerzeichen nach den Parametern (binPath = etc), das ist notwendig. Beachten Sie auch, dass ich fand es einfacher, den „type = interagieren“ fallen zu lassen und sie manuell in der Servicekonsole ändern.

Dann auf dem Master, auch sc.exe verwenden, starten Sie den öffentlichen Dienst der Ferne:

sc.exe \\slavemachine start SlaveService

Und Nachweis erbracht, dass das Programm auf den Slave-Maschinen ausgeführt wurde.

Nun, in meinem Fall, ich habe nicht wirklich brauchen, die GUI, die nicht für die erste Fehlersuche. Sobald ich alles richtig läuft bekam, habe ich einfach den Dienst konfiguriert als Dienstkonto laufen, aber nicht mehr in den interaktiven Modus.

Ich hoffe, dass Sie diese hilfreich finden.

Es gibt ein paar Komponenten Sie gehen zu müssen, dies zu verwirklichen.

Zunächst müssen Sie eine Methode mit dem Remote-Computer zu kommunizieren.

Zweitens, werden Sie etwas auf dem entfernten Rechner hören müssen, die Ihre Anwendung starten können.

Die anderen Vorschläge vor allem nutzen, um etwas eingebaut für eine oder beide dieser Komponenten, was in Ordnung ist, solange die Beschränkungen einer der gegebenen Lösungen geeignet sind.

PsExec sieht aus wie die vielversprechendsten, out-of-the-Box-Lösung. Andernfalls können Sie Ihre eigene App rollen auf einfache Botschaften über TCP / Named Pipes / was auch immer und nur laichen entsprechende Teilprozesse zu hören. Die einzige Einschränkung dabei ist, man ziemlich vorsichtig um die Sicherheit sein, werden Sie wollen, vor allem, wenn eine der Maschinen öffentlich ausgesetzt sind.

Die PSTools Suite wurde von Sysinternals entwickelt und war so groß, dass das Unternehmen von Microsoft einige Zeit später erworben wurde. Mit diesen Werkzeugen ist der beste Weg, um Ihre Aufgabe zu erfüllen.

Ich sehe Sie ein Problem erwähnt mit Anwendungen interaktiv ausgeführt wird. Darf ich interaktiv die / i-Schalter ausführen, um die Anwendung empfehlen die Verwendung. PSTools bietet alle Funktionen, die Sie suchen. Sie müssen nur mit den Schaltern spielen, um auf die gewünschte Ergebnis zu erhalten.

Ich habe noch nie erlebt, die Langsamkeit Sie in meinen Anwendungen beschreiben, die PSTools verwenden.

MPICH2 wird häufig in High Performance Computing Cluster verwendet und sollten in der Lage sein, zu tun, was Sie wollen. Auch wenn Sie es nicht für die Meldungen zwischen den Maschinen vorbei, können Sie den Prozess Launcher verwenden alle Prozesse auf der Master-Maschine zu starten. Es kann bis zu authentifizieren als ein bestimmten Windows-Benutzer auf den Maschinen eingestellt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top