Jump to content

VBS - Warten bis Anwendung geschlossen ist


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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!

Link zu diesem Kommentar

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
}

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...