testperson 1.761 Geschrieben 16. März 2012 Melden Geschrieben 16. März 2012 Hi, ich habe da ein Problem mit einem VB Script, welches eine Anwendungs starten soll, warten bis diese beendet ist und dann weiter laufen soll. Mein Code: Option Explicit 'Variabeln deklarieren Dim objWSH,objWMI,objWMIService,Proc,P,Weiter 'Erstellen der Objekte Set objWSH = CreateObject("WScript.Shell") Set objWMI = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objWMI.ConnectServer(".", "root\cimv2") 'Sicherheitslevel für WMI festlegen objWMIService.Security_.ImpersonationLevel = 3 'Programme starten objWSH.Run "Pfad zum ProgrammX.exe" WScrip.Sleep 1000 objWSH.Run "Pfad zum ProgrammY.exe" WScrip.Sleep 1000 objWSH.Run "Pfad zum Programm.exe" WScrip.Sleep 1000 'Solange loopen bis Programm gestartet ist Do Set Proc = objWMIService.ExecQuery("select * from win32_process") For Each P in Proc If lcase(P.Name) = "programm.exe" Then Weiter=False Else Weiter=True End If Next Loop while Weiter=True 'Solange loopen bis Programm beendet wird Do Set Proc = objWMIService.ExecQuery("select * from win32_process") For Each P in Proc If lcase(P.Name) = "programm.exe" Then Weiter=True Else Weiter=False End If Next Loop while Weiter=True 'User abmelden objWSH.Run "C:\Windows\System32\shutdown.exe /l" Nur irgendwie will es nicht.. Das ganze soll per RemoteApp veröffentlicht werden und nach dem Schließen des Programms soll der User vom Server abemelget werden. Vielen Dank Gruß Jan! Zitieren
Dukel 461 Geschrieben 16. März 2012 Melden Geschrieben 16. März 2012 Unter Powershell habe ich folgendes Stück Code für den Zweck (warten auf ein Process) geschrieben. Evtl. hilft dir das weiter. function Run-LocalProcess ($cmd, $Parameters) { $Timeout = [int]$cfg.configuration.appsettings.ConsistencyCheckerTimeOut $Timeoutms = $Timeout * 1000 $Process = New-Object System.Diagnostics.Process $Process.StartInfo = New-Object System.Diagnostics.ProcessStartInfo $ExitCode = $false $Process.StartInfo.FileName = $cmd $Process.StartInfo.Arguments = $Parameters $Process.StartInfo.UseShellExecute = $shell $Process.StartInfo.WindowStyle = 1; #Window style is hidden. Comment out this line to show output in separate console $null = $Process.Start() $ProcessId = $Process.Id $null = $Process.WaitForExit($Timeoutms) #Waits for the process to complete. if(@(Get-Process -Id $ProcessId -ErrorAction Silentlycontinue).count -gt 0){$Process.kill()} $ExitCode = $Process.ExitCode $Process.Dispose() return $ExitCode } Zitieren
Sunny61 819 Geschrieben 17. März 2012 Melden Geschrieben 17. März 2012 Gem. dieseyer.de: Skripte mußt Du die Aufrufe der Programme ändern: Das Skript läuft nach dem Start des Programms weiter, ohne darauf zu warten, dass das Programm seine Arbeit beendet hat. Häufig benötigt man aber die Ergebnisse, die das Programm z.B. in eine Datei schreibt. Dazu kann man die .Run-Zeile mit true enden lassen (nach zwei mal Komma) und das Skript 'wartet' auf das Ende des Programms: WScript.CreateObject("WScript.Shell").Run "notepad", , True Weitere Parameter entnehme man der 'Windows Script'-Hilfe. Zitieren
testperson 1.761 Geschrieben 20. März 2012 Autor Melden Geschrieben 20. März 2012 Hi, besten Dank Sunny.. Damit klappts wunderbar. Das mit der Poweshell werde ich mal ausprobieren wenn etwas Zeit ist :) Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.