netværk - Start fjernprocesser i et Windows-netværk

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har flere slavemaskiner og en mastermaskine, der sammen kører en distribueret applikation. Processer på hver slave maskine skal have en GUI og netværksadgang (jeg tror det ville blive kaldt en interaktiv proces derefter). For brugervenlighed ville det være dejligt, hvis masteren kunne starte/stoppe processerne på disse slavemaskiner.


Min første ide var at bruge WMI og Win32\_Process-klassen til at starte en fjernproces, men efter yderligere undersøgelse blev det afsløret, at processer, der startes på denne måde, er ikke-interaktive og isolerede, og kan således ikke have nogen GUI. En note siger, at man kan bruge Win32\_ScheduledJob. Opret for at oprette en ekstern interaktiv proces, men den kører under LocalSystem-kontoen, som jeg gerne vil undgå (jeg kunne heller ikke få det til at køre korrekt).


Hvad ville være gode måder at løse dette problem på?
Måske er det muligt at starte en hjælperapplikation, der igen starter en ordentlig proces, men det virker ret snavset.


Rediger: PsExec var virkelig klumpet, da jeg prøvede det og langsomt som helvede (ikke sikker på hvorfor). Hvis man ser videre på PsExec, ser det ud til, at det installerer en midlertidig tjeneste på den eksterne maskine for at starte applikationen. Ville det være den eneste måde at gyde en interaktiv proces ved hjælp af en ordentlig identitet? Skal jeg medtage hjælpeservice i opsætningen til noderne? Men selv da, hvordan ville jeg så kommunikere med det?

Bedste reference


PsExec er en del af sysinternals suite, der kan gøre det


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


Hvis dine servere kører Windows 2008, kan du også bruge


Terminal Services Remote App [6]

Andre referencer 1


Du kan bruge kommandoen 'ved'.


Åbn en kommandolinje og skriv


at /?


Ind i terminalen. Den ene ulempe er, at tiden på fjernsystemet skal være inden for noget rimeligt delta i din. Det er heller ikke øjeblikkeligt. Du skal vente et par sekunder for at sikre, at fjernplanlæggeren ikke går glip af arrangementet helt.


Der er et WMI svarende til dette, og har de samme grundlæggende advarsler som på:


LISTE 3: Kode til at oprette en interaktiv proces på Windows Server 2003, Windows XP og Win2K SP3-maskiner


Const INTERVAL = "n"
Const MINUTES  = 1

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

Set objWMIService = \_
    GetObject("winmgmts:\" & strComputer & "
ootcimv2")
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


Jeg tror, ​​at de fleste af de andre måder at gøre det på (uden at installere din egen tjeneste) er blevet slået fra af forskellige service packs på grund af sårbarheder.

Andre referencer 2


De følgende to efter brug. NET til at udføre eksterne processer.



  1. Brug af WMI


    http://weblogs.asp.net/steveschofield/archive/2006/06/06/WMI---start-a-process-on-remote-machine-passing-credentials\_2E00\_.aspx[7]

  2. Kodeprojekteksempel



http://www.codeproject.com/KB/IP/RemotingExec.aspx[8]


Eksemplerne udføres med brugerdefinerede referencer & den eksterne eksekverbare er en Win Form app.
Håber dette hjælper.

Andre referencer 3


Hvis eniregruppen er rimeligt under din kontrol, kan det være muligt at implementere disse eksterne processer som Windows Services. En tjeneste kan være interaktiv (ikke som standard selvom), og den kan styres eksternt via standard Service Control Manager, der kører på hver Windows-pc.

Andre referencer 4


Må jeg spørge, hvorfor slaveprocesserne skal have en GUI? Jeg har en lignende opsætning, men havde kun brug for en GUI under første opsætning.


Anyway, her er hvad jeg har gjort, men det afhænger desværre af den proces, der kører som LocalSystem-kontoen, som jeg forstår, at du forsøger at undgå, hvis du virkelig har brug for GUI'en.


For at give dig lidt baggrund, var applikationen, jeg måtte distribuere, Hudson, og det var en tidligere version, hvor du distribuerer det, ved at køre et Java WebStart-program og dermed behovet for en GUI (i hvert fald under sæt up, for at hjælpe med fejlfinding). [9]


Hvad jeg gjorde, blev oprettet slaveapplikationerne som tjenester på slavemaskinerne ved hjælp af sc.exe (hvilket er en PITA for at få det rigtige, heldigvis gør du kun dette en gang). Noget i tråd med:


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


Bemærk mellemrumene efter parametrene (binPath=etc), det er nødvendigt. Bemærk også, at jeg fandt det lettere at droppe 'type=interagere' og manuelt ændre det i servicekonsollen.


Derefter på master, også ved hjælp af sc.exe, starter jeg tjenesten eksternt:


sc.exe \slavemachine start SlaveService


Og bekræftet, at programmet kørte på slavemaskinerne.


Nu i mit tilfælde havde jeg ikke rigtig brug for GUI, bortset fra til første fejlfinding. Så snart jeg fik alt i gang, konfigurerede jeg simpelthen tjenesten for at køre som en servicekonto, men ikke længere i interaktiv tilstand.


Jeg håber du finder det nyttigt.

Andre referencer 5


Der er et par komponenter, du skal bruge for at få dette til at ske.


For det første skal du have en metode til kommunikation med fjernmaskinen.


For det andet har du brug for noget på den eksterne maskine lytte, der kan starte din ansøgning.


De andre forslag bruger frem for alt noget indbygget til en eller begge disse komponenter, hvilket er fint, så længe begrænsningerne af en given løsning er passende.


PsExec ligner den mest lovende, out-of-the-box løsning. Ellers kan du rulle din egen app for at lytte til enkle beskeder via TCP/navngivne pipes/uanset og bare gyde passende underprocesser. Den eneste advarsel med det er, at du vil være ret forsigtig omkring sikkerhed, især hvis nogen af ​​maskinerne er offentligt udsatte.

Andre referencer 6


PSTools-pakken blev udviklet af Sysinternals og var så stor, at virksomheden blev købt af Microsoft engang senere. Brug af disse værktøjer er den bedste måde at udføre din opgave på.


Jeg kan se, at du nævnte et problem med at køre applikationer interaktivt. Må jeg foreslå at bruge/i-knappen til at køre applikationen interaktivt. PSTools tilbyder alle de funktioner, du leder efter. Du skal blot lege med kontakterne for at opnå det ønskede resultat.


Jeg har aldrig oplevet den langsommelighed du beskriver i mine applikationer, der bruger PSTools.

Andre referencer 7


MPICH2 bruges ofte i High Performance Computing-klynger og skal kunne gøre, hvad du vil. Selvom du ikke bruger det til at sende meddelelser mellem maskiner, kan du bruge sin processtart til at starte alle processer op fra masteren. Det kan konfigureres til at godkende som en bestemt Windows-bruger på maskinerne. [10]