laufende exe nach beenden löschen

  • Hallo,

    ich habe eine cd fertig wo ich mir aussuchen kann.... will ich jetzt spiele oder für Arbeit installieren.
    So.. geht gut... aber bei den Spielen werden einige Fenster geöffnet die ich erst schließen kann
    wenn das Desktop erscheint. Aber es wird erst auf´s Desktop geschaltet wenn die Exe´n
    beendet sind ...... jetzt habe ich mir ein Script.exe geschrieben was ich über nlite in den
    autostart -ordner kopiere. Diese löscht anschließend alle geöffnetten Fenster (3).
    Das geht auch super.... aber ich habe wo gelesen... weiß nur nicht mehr wo und die suche hat mir auch nicht viel geholfen .... nach ausführen kann exe sich selber aus dem Ordner löschen.

    Also, weiß jemand wie ich eine ausführende exe sich nach beenden selber aus dem Autostart-Ordner wieder löschen kann..... Schön wäre es auch wenn das Script feststellen könnte ob ein Fenster geöffnet ist oder kein Fenster ..... etwa so...

    if ("auf Desktop ein Fenster") then ("egal welches ")
    Fensteractive = Killfenster
    oder so ... wenn nicht lösch Script...
    somit wäre es für alle eventualitäten gerüstet.... neue progs und so .....

    Ist nur eine Frage .... ist ja kein prob die selbst zu löschen .... wäre aber ein versuch wert.

    dank schon mal im vorraus an alle die sich hier für mich den hübschen Kopf zerbrechen......
    ( ihr seht trotzdem gut aus .. :-)) lol )

    Chicago


    Edit : Habe jetzt von g-force gelesen....

    http://www.german-nlite.de/geloest-Autosta...ipts-t8237.html

    aber wie schreib ich die batch und wie kann ich die in der nlite cd einbauen ... $OEM$ ordner oder wo?

    Chicago

    Edit peethebee: Link angepasst.

    • Offizieller Beitrag

    Hi,

    hier mal ein erster Versuch zum Test:

    Spoiler anzeigen
    [autoit]

    _closeWindows()
    _SelfDelete()

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

    Func _closeWindows()
    For $y = 0 To 3
    Global $var = WinList()
    For $i = 1 To $var[0][0]
    ; Only display visble windows that have a title
    If $var[$i][0] <> "" And IsVisible($var[$i][1]) Then
    WinKill($var[$i][0])
    WinClose($var[$i][0])
    EndIf
    Next
    Next
    EndFunc ;==>_closeWindows

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

    Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
    Return 1
    Else
    Return 0
    EndIf

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

    EndFunc ;==>IsVisible

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

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & 'scratch.bat'
    FileWrite(@TempDir & "scratch.bat", $sCmdFile)
    Run(@TempDir & "scratch.bat", @TempDir, @SW_HIDE)
    EndFunc ;==>_SelfDelete

    [/autoit]

    So long,

    Mega

  • Hi,

    ich habe auch einige Skripte, die ich bei der Win-Installation in den Autostart kopiere.

    Hier ne sehr schlichte Methode, eine Exe-Datei nach Ausführung zu löschen, funktioniert aber fehlerfrei.

    „Run(@ComSpec & " /c del /f " & '"' & @AutoItExe & '"', @WorkingDir, @SW_HIDE)“

    Der Befehl löscht eine Exe-Datei egal, wo sie sich befindet. Er sollte natürlich ganz am Ende, unmittelbar vor “Exit”, eingefügt werden, damit das Skript bis zum Ende läuft und nicht zu früh gelöscht wird.

    Hinsichtlich der zu schließenden Fenster würde ich ein ganz schlichtes Skript mit „WinWait“ und „WinWaitActiv“ schreiben und die Fenster darin mit „WinKill“ oder „WinClose“ schließen. Da hast Du die Möglichkeit, einen Timeout (z.B. 5 Sek.) zu setzen. Wenn ein Timeout gesetzt wurde, wartet das Skript, ob das Fenster sich öffnet. Wenn nicht, wird das Skript fortgesetzt.

    Wie gesagt, eine sehr schlichte Methode. Aber das Einfache muss ja nicht immer das Schlechteste sein. Ich habe mit dieser Methode jedenfalls sehr gute Erfahrungen gemacht.


    Ein Tipp noch zum Schluss:

    Ich würde an den Anfang des Skriptes eine Pause (mindestens 20 Sekunden) setzen, um sicher zu stellen, dass der Desktop auch aktiv ist, bevor die Exe-Datei ausgeführt wird.


    Gruß Tom

  • Ich hab das anders bewerkstelligen wollen

    Am Ende des Skripts einfach einen 2. Script ausführen der nicht im Autostart liegt und damit den ersten löschen. Der ist ja nichtmehr aktiv und kann gelöscht werden.