testperson 1.711 Geschrieben 16. März 2012 Melden Teilen 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 Link zu diesem Kommentar
Dukel 455 Geschrieben 16. März 2012 Melden Teilen 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 Link zu diesem Kommentar
Sunny61 807 Geschrieben 17. März 2012 Melden Teilen 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 Link zu diesem Kommentar
testperson 1.711 Geschrieben 20. März 2012 Autor Melden Teilen 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 Link zu diesem Kommentar
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.