Verhindern dass mehrere Programme ausgeführt werden

  • Hallo zusammen

    Ich würde gerne im Rahmen der Officemigration verhindern, dass Office Komponten auf dem PC gestartet werden können, während des Setups/Remove.

    Der einzige weg der mir einfällt, ist nun mehrere Exefiles zu machen, nach diesem Muster, die jeweils einen Prozess abfragen:

    [autoit]

    $i = 0
    while 1
    ProcessWait("winword.exe")
    RunAs ( 'myuser', 'mydomain', 'mypassword', 0, @ComSpec & ' /c taskkill.exe /F /IM winword.exe', @WindowsDir ,@SW_HIDE )
    $i += 1
    ToolTip("Office 2010 Migration is active, Kills: " &$i, 550, 0)
    Sleep(5000)
    WEnd

    [/autoit]

    Gibt es eine Möglichkeit, dies innerhalb einer Exe Datei abzufangen? Wie? So dass weder Outlook.exe, Winword.exe, Excel.exe gestartet werden können?

    Surfy

  • ProcessList gibt Dir eine Liste aller Prozesse die gerade laufen. Diesen Array kannst Du in einer Schleife durchlaufen und wenn es eines der Programme ist die gekillt gehören, dann kill es.

  • Danke für den Tip! Also ungefähr so:

    [autoit]

    while 1
    $list = ProcessList("winword.exe")
    for $i = 1 to $list[0][0]
    ;msgbox(0, $list[$i][0], $list[$i][1])
    RunAs ( 'MyUser', 'MyDomain', 'MyPassWord', 0, @ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir ,@SW_HIDE )
    next
    ToolTip("Office 2010 Migration is active, Kills: " &$i, 550, 0)
    Sleep(5000)
    $list = ProcessList("excel.exe")
    for $i = 1 to $list[0][0]
    ;msgbox(0, $list[$i][0], $list[$i][1])
    RunAs ( 'MyUser', 'MyDomain', 'MyPassWord', 0, @ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir ,@SW_HIDE )
    next
    Sleep(5000)
    WEnd

    [/autoit]

    Das funktioniert :rock:

    Wäre es irgendwie noch möglich, den Killcounter aus dem ersten Beispiel zu integrieren?:

    [autoit]

    $i += 1
    ToolTip("Office 2010 Migration is active, Kills: " &$i, 550, 0)

    [/autoit]

    Leider reicht dafür mein Skill nicht ;(

  • Hier das abgekürzte Verfahren. Die Frage ist nur, wann möchtest Du das Skript beenden?

    [autoit]

    Global $iKill = 0
    While 1
    $list = ProcessList()
    For $i = 1 To $list[0][0]
    Switch $list[$i][0]
    Case "Winword.exe", "Outlook.exe"
    ToolTip("Office 2010 Migration is active, Kills: " & $list[$i][0], 550, 0)
    Sleep(1000)
    RunAs('MyUser', 'MyDomain', 'MyPassWord', 0, @ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir, @SW_HIDE)
    $iKill = $iKill + 1
    Case "xy.exe" ; Zweite gruppe von Programmen die anders gekillt werden muss
    ; Anderer Kill Befehl hier einfügen
    $iKill = $iKill + 1
    EndSwitch
    Next
    Sleep(1000)
    WEnd

    [/autoit]