Abfrage ob Prozesse laufen wenn True MSg Box wenn false ...?

  • VBScript

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von OMA.

    Abfrage ob Prozesse laufen wenn True MSg Box wenn false ...?

    Hallo zusammen,

    ich frage hier 2 Prozesse ab . wenn beide oder einer der beiden grade offen ist dann kommt eine Message Box

    1. sollte das script nochmals von vorne durchgelaufen werden wenn man auf den OK Button klickt
    2. sollte falls keine Msg Box kommt (also keiner der Prozesse läuft) ein setup.exe aus dem Verzeichnis aus gestartet werden wo auch dieses Script läuft...

    Hier mein Script (bin Anfänger und im Moment wohl etwas verwirrt).....aber vllt kann mir ja wer helfen... Wenn ich was in der Praxis sehe kann ich mir das eher merken als die Theorie in Büchern...

    Dim WSHShell

    strComputer = "."

    Set WSHShell=CreateObject("WScript.Shell")
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    CHKPROC

    Set WSHShell = Nothing

    Sub CHKPROC
    Dim bAktiv
    Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
    For Each objProcess in colProcessList
    If objProcess.Name = "notepad.exe" Or objProcess.Name = "calc.exe" Then
    bAktiv = True
    End If
    Next
    If bAktiv Then
    MsgBox "Please close all Notepad / Calc windows and press OK to continue"
    CHKPROC
    End If
    Next
    If bAktiv = False
    Then
    ./bin/setup/setup.exe

    End Sub
    Naja, warst ja schonmal auf dem richtigen Pfad.

    Bittesehr:
    //nochmal optimiert.

    Visual Basic-Quellcode

    1. Dim WSHShell
    2. Set WSHShell=CreateObject("WScript.Shell")
    3. Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    4. Check_Running
    5. Sub Check_Running
    6. Set notepad_running = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'notepad.exe'")
    7. Set calc_running = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'calc.exe'")
    8. If notepad_running.Count > 0 or calc_running.Count > 0 then
    9. Msgbox "Please close all Notepad / Calc instances and press OK to continue",48, "Error"
    10. Check_Running
    11. Else
    12. WSHShell.Run "/bin/setup/setup.exe"
    13. End If
    14. End Sub


    // Funktioniert 100 pro nun...:)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „OMA“ ()

    Und das funktioniert wie gewünscht? Wenn er zuerst Explorer.exe findet, dann wird sofort versucht zu installieren. Und wenn Notepad oder calc gefunden wird, dann läuft er endlos dadurch. Oder habe ich da was übersehen?
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    peterfido schrieb:

    Oder habe ich da was übersehen?

    Hi,

    ja hast du.

    VB.NET-Quellcode

    1. For Each objProcess in colProcessList
    2. CheckProc
    3. Next


    Überprüft jeden Prozess, der läuft.

    ..und wenn er in diesem Prozess-Array nachfolgende Prozesse findet, kommt die Nachricht bitte alles zu schliessen und die Methode wird neu aufgerufen.

    VB.NET-Quellcode

    1. If objProcess.Name = "notepad.exe" Or objProcess.Name = "calc.exe" Then
    2. MsgBox "Please close all Notepad / Calc windows and press OK to continue"
    3. CheckProc


    Stimmt schon alles so. Und wo du "Explorer.exe" liest, ist mir auch nicht klar?

    Gruß
    Explorer.exe läuft normal immer, wenn Windows oben ist.

    Spiel das doch mal durch, was er macht, wenn er als erstes auf Explorer.exe stößt. Dann "guckt" er, ob das Teil notepad oder calc heisst und wenn nicht, wird doch setup aufgerufen, egal ober später evtl. noch calc oder notepad gefunden wird. Und wenn Notepad oder Calc gefunden wird, läuft er sich nen Wolf, bis der Stack voll ist.

    Falls Du da immer noch anderer Meinung bist, probiere ich das dann auch mal aus... :)
    Gruß
    Peterfido

    Keine Unterstützung per PN!