If und While

  • Hey,

    [autoit]


    ; Funktioniert nicht
    If ProcessExists($pid) Then
    Do
    ProcessClose($pid)
    Until Not ProcessExists($pid)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; Funktioniert
    While 1
    If ProcessExists($pid) Then
    Do
    ProcessClose($pid)
    Until Not ProcessExists($pid)
    ExitLoop 1
    EndIf
    WEnd

    [/autoit]

    Ich hab festgestellt, dass wenn ich If ohne einer While-Schleife verwende nicht ausgeführt wird, während ShellExecuteWait und RunWait.

    Also wenn ich jetzt Zb. IsoBuster silent installiere, möchte ich das wenn der Prozess "isobuster_toolbar.exe" exestiert sofort geschlosen, wird das funktioniert aber nur mit hilfe einer While Schleife, dieser Prozess startet nich irrgendwan sonder bevor SchellExecute zuende ist.

    [autoit]

    $InstallDir = @ProgramFilesDir & "\IsoBuster"

    [/autoit][autoit][/autoit][autoit]

    If ProcessExists("isobuster_toolbar.exe") Then
    Do
    ProcessClose("isobuster_toolbar.exe")
    Until Not ProcessExists("isobuster_toolbar.exe")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ShellExecuteWait("isobuster_all_lang.exe","/SILENT /NOCANCEL /DIR=" & '"' & $InstallDir & '"')

    [/autoit]


    Das geht eigenartigerweise nicht.

    Nur so wird der Prozess beendet:

    [autoit]

    $InstallDir = @ProgramFilesDir & "\IsoBuster"

    [/autoit][autoit][/autoit][autoit]

    While 1
    If ProcessExists("isobuster_toolbar.exe") Then
    Do
    ProcessClose("isobuster_toolbar.exe")
    Until Not ProcessExists("isobuster_toolbar.exe")
    ExitLoop 1
    EndIf
    WEnd

    [/autoit][autoit][/autoit][autoit]

    ShellExecuteWait("isobuster_all_lang.exe","/SILENT /NOCANCEL /DIR=" & '"' & $InstallDir & '"')

    [/autoit]
  • Durch die While überprüft der doch jedesmal, ob das IsoBuster Ding läuft,
    hast du keine While, läuft das einmal und beendet dann die If Option.
    ^^

  • Mmhh... aber eigentlich müsste es trotzdem funktionieren, da der Process ja während ShellExecute läuft und nich danach.

  • Dein Problem liegt wohl nicht an der Do-Schleife.
    Ich habe gerade Dein Problem nachgestellt und da hat die erste Variante auch funktioniert.

    Spoiler anzeigen
    [autoit]

    ; Funktioniert nicht
    $pid = "Scite.exe"
    If ProcessExists($pid) Then
    Do
    ProcessClose($pid)
    Until Not ProcessExists($pid)
    EndIf
    Exit

    [/autoit]

    Anscheinend stimmt entweder mit der $pid etwas nicht, oder irgendetwas anderes...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...