VBS Script - überwachen ob Prozess läuft und starte dazu das programm, dann warten bis der Prozess beenet wird

  • VBScript

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    VBS Script - überwachen ob Prozess läuft und starte dazu das programm, dann warten bis der Prozess beenet wird

    Hallo,

    ich hoffe ihr könnt mir helfen.

    wollte ein script das folgendes macht :

    Script starten :
    überprüft ob Prozess "nr1.exe" am laufen ist-> wenn ja starte dazu "nr2.exe" und wartet mit der weiteren ausführung des script bis der eigentliche Prozess "nr1.exe" beendet wird und erst danach startet Prozess "nr3.exe".

    ich brauch das script um ein frontend zu starten, dabei soll parallel "explorer" task gekillt werden um das windows zu verstecken.
    und wenn das frontend normal beendet bzw abstürzt dann soll wieder das explorer gestartet werden.

    also zusammenfassung :

    script starten :
    Prozess "nr1.exe" wird überprüft
    wenn ja starte einmalig "nr2.exe" und wartet solange bis "nr1.exe" beendet wird.
    dann einmalig "nr3.exe" starten

    nr1:frontend
    nr2:kill explorer
    nr3:starte explorer

    gibt es dafür eine möglichkeit ? bzw alternative?

    Quellcode

    1. strComputer = "."
    2. Set objWMIService = GetObject("winmgmts:" _
    3. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    4. Set colProcesses = objWMIService.ExecQuery _
    5. ("Select * from Win32_Process Where Name = 'gameex.exe'")
    6. If colProcesses.Count = 1 Then
    7. Set objShell = CreateObject("WScript.Shell")
    8. objShell.Run "D:\Retro\pcwKill.EXE /f explorer.exe", 0, False

    bis hierhin funktioniert das auch, nur wie schaffe ich es das er danach warten soll bis "gameex.exe" beendet ? und erst danach das hier auszuführen :

    Quellcode

    1. objShell.Run """C:\Windows\explorer.exe""", 0, False

    Probiers mal damit. Man kann mit WMI auch auf Events warten.


    VB.NET-Quellcode

    1. strComputer = "."
    2. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    3. Set colMonitoredProcesses = objWMIService.ExecNotificationQuery _
    4. ("Select * From __InstanceDeletionEvent Within 1 Where TargetInstance ISA 'Win32_Process' And TargetInstance.Caption = 'notepad.exe'")
    5. Set objLatestProcess = colMonitoredProcesses.NextEvent
    6. Wscript.Echo "Notepad has been terminated."


    Im hintergrund wird aber denke ich auch nur ein Polling stattfinden als würdest du selber in einer Schleife schauen.
    Keine Ahnung was du mit Echtzeit meinst in dem Zusammenhang.
    Das ist meine Signatur und sie wird wunderbar sein!
    Danke ! so klappt das :

    Quellcode

    1. Set objShell = CreateObject("WScript.Shell")
    2. objShell.Run "D:\Retro\pcwKill.EXE /f explorer.exe", 0, False
    3. strComputer = "."
    4. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    5. Set colMonitoredProcesses = objWMIService.ExecNotificationQuery _
    6. ("Select * From __InstanceDeletionEvent Within 1 Where TargetInstance ISA 'Win32_Process' And TargetInstance.Caption = 'gameex.exe'")
    7. Set objLatestProcess = colMonitoredProcesses.NextEvent
    8. Set objShell = CreateObject("WScript.Shell")
    9. objShell.Run """C:\Windows\explorer.exe""", 0, False


    kurze frage noch braucht das viel resourcen ?