Domanda

Ho diverse macchine slave e una macchina master che insieme eseguire un'applicazione distribuita. Processi di ciascun macchina slave avere una GUI e rete di accesso (Credo che sarebbe chiamato un processo interattivo poi). Per facilità d'uso, sarebbe bello se la macchina master potrebbe iniziare / arrestare i processi su quelle macchine slave.

La mia prima idea era quella di utilizzare WMI e il Win32_Process classe per avviare un processo remoto, ma dopo ulteriori indagini è stato reveiled che i processi avviati in questo modo sono non interattivo e isolata, e quindi non può avere alcuna interfaccia grafica. Una nota dice che si può usare Win32_ScheduledJob.Create per creare un processo interattivo a distanza, ma eseguito con l'account LocalSystem che vorrei evitare (anche non riuscivo nemmeno a farlo funzionare correttamente).

Quale sarebbe buoni modi per risolvere questo problema? Forse è possibile lanciare un'applicazione di supporto che a sua volta avvia un processo corretto, ma che sembra piuttosto sporca.

Modifica: PsExec era veramente goffo quando l'ho provato e lento come l'inferno (non so perché). Guardando ancora più in PsExec sembra che installa un servizio temporaneo sul computer remoto per avviare l'applicazione. Questo sarebbe l'unico modo per generare un processo interattivo utilizzando una propria identità? Devo includere un servizio di supporto nella messa a punto per i nodi? Ma anche allora, come faccio a comunicare con esso, allora?

È stato utile?

Soluzione

PsExec fa parte della suite di Sysinternals che può farlo

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

Se i server sono in esecuzione Windows 2008 è possibile utilizzare anche

Terminal Services Remote App

Altri suggerimenti

È possibile utilizzare il comando "at".

Aprire una riga di comando e digitare

at /?

nel terminale. L'unico inconveniente è che il tempo sul sistema remoto deve essere entro qualche ragionevole delta del tuo. Non è anche immediato. È necessario attendere alcuni secondi per assicurarsi che l'utilità di pianificazione a distanza non si lascia sfuggire l'evento del tutto.

C'è un WMI equivalente a questo, e ha gli stessi avvertimenti base al:

Listing 3: codice per creare un processo interattivo su Windows Server 2003, Windows XP, e Win2K SP3 Macchine

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

Credo che la maggior parte degli altri modi per farlo (senza installare il proprio servizio) sono stati spenti da vari service pack a causa di vulnerabilità.

Le seguenti due post uso NET per eseguire processi remoti.

  1. Utilizzando WMI

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

  2. CodeProject Esempio

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

Gli esempi di esecuzione con le credenziali personalizzati e l'eseguibile a distanza è un applicazione Windows Form. Spero che questo aiuti.

Se il gruppo enire è ragionevolmente sotto il vostro controllo, potrebbe essere possibile per implementare questi processi remoti come servizi di Windows. Un servizio può essere interattivo (non di default però) e può essere controllato a distanza tramite il Gestore di serie di controllo del servizio in esecuzione su ogni PC Windows.

Si può sapere perché i processi di schiavi devono avere una GUI? Ho un set up simile, ma aveva bisogno di una GUI solo durante la configurazione iniziale.

In ogni caso, ecco quello che ho fatto, ma purtroppo si basa sul processo di esecuzione come l'account LocalSystem, che capisco si sta cercando di evitare, se si ha realmente bisogno l'interfaccia grafica.

Per darvi un po 'di sfondo, l'applicazione ho dovuto distribuire era Hudson , e questo era una versione precedente in cui il modo di distribuire è per l'esecuzione di un'applicazione Java Web Start, e quindi la necessità di una GUI (almeno durante istituito, per aiutare la risoluzione dei problemi).

Quello che ho fatto è stato istituito le applicazioni di schiavi come servizi sul macchine slave utilizzando Sc.exe (che è una valle di lacrime per arrivare subito, per fortuna solo si esegue questa operazione una sola volta). Qualcosa sulla falsariga di:

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

Si noti gli spazi dopo i parametri (binpath = ecc), quelli sono necessari. Si noti anche che ho trovato più facile far cadere il "type = interagire" e modificare manualmente nella console di servizio.

Poi sul master, anche utilizzando Sc.exe, inizio il servizio a distanza:

sc.exe \\slavemachine start SlaveService

e verificato che il programma era in esecuzione sulle macchine slave.

Ora, nel mio caso, non ho davvero bisogno l'interfaccia grafica, oltre che per la risoluzione dei problemi iniziali. Non appena ho ottenuto tutto funziona correttamente, ho semplicemente configurato il servizio per l'esecuzione come un account di servizio, ma non più in modalità interattiva.

Spero che è risultato utile.

Ci sono un paio di componenti si sta andando ad avere bisogno di fare questo accadere.

In primo luogo, avrete bisogno di un metodo di comunicazione con il computer remoto.

In secondo luogo, avrete bisogno di qualcosa sulla macchina remota di ascolto in grado di avviare l'applicazione.

Gli altri suggerimenti di cui sopra tutti usano qualcosa di built-in per uno o entrambi questi componenti, che va bene, a patto che le restrizioni di alcun le soluzioni fornite sono appropriate.

PsExec si presenta come la soluzione più promettente, out-of-the-box. In caso contrario, si può rotolare il proprio app per ascoltare i semplici messaggi tramite TCP / named pipe / qualunque cosa e appena depongono le uova appropriate sotto-processi. L'unica avvertenza è che con si vorrà essere abbastanza attenzione intorno sicurezza, soprattutto se una delle macchine sono esposti al pubblico.

La suite PsTools è stato sviluppato da Sysinternals ed era così grande che la società è stata acquistata da Microsoft qualche tempo dopo. L'utilizzo di questi strumenti è il modo migliore per realizzare il vostro compito.

Vedo che lei ha citato un problema con l'esecuzione di applicazioni in modo interattivo. Posso suggerisco di usare l'opzione / I per eseguire l'applicazione in modo interattivo. PsTools offre tutte le funzionalità che si sta cercando. Hai solo bisogno di giocare con gli switch per ottenere il risultato desiderato.

Non ho mai provato la lentezza che si descrive nelle mie applicazioni che utilizzano PsTools.

MPICH2 è spesso usato in cluster High Performance Computing e dovrebbero essere in grado a fare quello che vuoi. Anche se non ne fanno uso per il passaggio dei messaggi tra le macchine, è possibile utilizzare il suo programma di avvio processo per avviare tutti i processi su dalla macchina master. Può essere configurato per l'autenticazione come un particolare utente di Windows sulle macchine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top