_selfdelete ... löschen des autoitscripts nach beendigung (modifizierung)

  • Aufgrund einiger Tools, und Posts habe ich gemerkt, dass dieses Func nicht ganz unerwünscht ist.
    Es ist eine Modifikation einer 2007 geposteten Funktion

    Man kann damit nicht nur das eigene Script killen sondern eine Reihe von Files

    _SelfDelete($_SelfDeletefiles,$iDelay = 3)
    $_SelfDeletefiles kann entweder eine einzelne Datei oder ein Array an Files sein oder eine Auflistung von Files (Trennzeichen = ; )


    [autoit]


    #include-once

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

    #region #### Includes ============================================================================================================
    #include<Array.au3>
    #endregion ======================================================================================================================

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

    ; #INDEX# =======================================================================================================================
    ; Title .........: Script kann sich selbst löschen
    ; Author(s) .....: Höllinger Marc-André
    ; ===============================================================================================================================

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

    #cs
    #CURRENT# =====================================================================================================================
    _SelfDelete
    ===============================================================================================================================
    #ce

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

    Func _SelfDelete($_SelfDeletefiles,$iDelay = 3)
    Local $i
    Local $_filelist
    Local $_SelfDeletefilename = @TempDir & "\scratch.bat"

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

    if IsArray($_SelfDeletefiles) then
    $_filelist = $_SelfDeletefiles
    Else
    $_filelist = StringSplit($_SelfDeletefiles,';')
    _ArrayDelete($_filelist,0)
    EndIf
    _ArrayDisplay($_filelist)

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

    FileDelete($_SelfDeletefilename)
    FileWrite($_SelfDeletefilename,'ping -n ' & $iDelay & ' 127.0.0.1 ' & @CRLF)
    for $i = 0 to (UBound($_filelist)-1)
    FileWrite($_SelfDeletefilename,':loop'&$i & @CRLF)
    If StringInStr(FileGetAttrib($_filelist[$i]),'D') >0 Then
    FileWrite($_SelfDeletefilename,'rd "' & $_filelist[$i] & '" /s/q ' & @CRLF )
    Else
    FileWrite($_SelfDeletefilename,'del "' & $_filelist[$i] & @CRLF )
    EndIf
    FileWrite($_SelfDeletefilename,'if exist "' & $_filelist[$i] & '" goto loop'&$i & @CRLF )
    Next
    FileWrite($_SelfDeletefilename,'del ' & $_SelfDeletefilename)
    Run($_SelfDeletefilename, '', @SW_HIDE)

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

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von draco105457 (12. September 2011 um 16:59)

  • Davon gibt es tausende Funktionen. Einige mit bat-Datei einige ohne, deine hat jetzt einen Loop mit drinnen und kann mehrere Dateien löschen.
    Die kann man dann ja auch direkt mit FileDelete löschen und man hat eine Rückmeldung, ob es funktioniert hat.

    @TempDir hat keinen abschließenden Backslash, also wird die temporäre Datei falsch angelegt.
    Das Array-Include braucht man auch nicht, man kann ja einfach bei 1 anfangen zu zählen, oder bei StringSplit noch einen Parameter hinzufügen.
    Und sehe ich das richtig, das wenn die Datei gesperrt ist (sich nicht löschen lässt), dass dann die Batch-Datei hängt.

    Zu meiner Verteidigung: Getestet habe ich nichts.
    :D

  • Das mit mehreren Files musste ich deshalb machen, da bis zum Schluss Datenbanken geöffnet sind und das Hauptscript neben 2 anderen Tools
    mitläuft die sich erst beenden und dann erst löschen lassen wenn das Hauptscript beendet ist.

    @Tempdir ist korrigiert ... danke

    Wenn Sie gesperrt ist rennt das Script im Kreis und hängt.
    Es soll aber nur den Temporären Müll entfernen damit der Kunde schlussendlich nichts mehr auf seinem Rechner vorfindet :D