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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)