Selbstzerstörung für Anfänger oder Wieso funktioniert das nicht?

  • Hallo Zusammen,

    ich habe in den tiefsten Archiven diese Funktion die das bei der .Exe die Selbstzerstörung auslösen soll. Naja alles wird gelöscht außer der Exe die alles löscht. Sieht jemand einen Fehler?

    Spoiler anzeigen
    [autoit]

    sleep(3000)
    if not Fileexists(@StartMenuDir&"\Uninstall.exe") Then
    FileCopy(@ScriptDir&"\Uninstall.exe", @StartMenuDir&"\Uninstall.exe")
    ShellExecute(@StartMenuDir&"\Uninstall.exe")
    Exit
    Else
    DirRemove("C:\Programme\Designwechsler 2008", 1)
    DirRemove(@ProgramsDir&"\Designwechsler 2008", 1)
    sleep(3000)

    _SelfDelete(10)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/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 & '"' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    EndFunc

    [/autoit]

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    • Offizieller Beitrag

    Hallo

    Benutz mal lieber Dealy = 0, da die batch datei sowieso in einem Loop ist, bis die exe gelöscht wird.
    Falls das nicht hilft erstetz mal die momentane _SelfDelete mit derhier:

    Spoiler anzeigen
    [autoit]

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

    [/autoit]


    Steht da ununterbrochen "Zugriff verweigert?"

    Mfg Spider

  • ALSO xD

    Ich habe den Fehler gefunden bzw glaube das zumindest. Die Sache ist das ich die Uninstall.exe temporär in C:\Dokumente und Einstellungen\User\Startmenü reinkopiert habe. Nun hat ja eine batch Datei gößere Probleme mit langen Pfadnamen wie jeder weiß und es kommt etwas raus was nicht mehr funktionieren kann. Dann habe ich die Pfadangabe einfach in C:\ geändert. So sollte es eigentlich funktionieren aber das tut es nicht. Wieso? Fragt Spybot und das angehängte Bild... -_-*

    EDIT: Danke Spider werd ich gleich mal testen...

  • Ok Jetzt wo ichs mit deiner Version teste steht da wirklich ZUGRIFF VERWEIGERT. X(


    EDIT: Habe es jetzt einfach so gemacht das funktioniert:

    Spoiler anzeigen
    [autoit]

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = '@echo off'& @CRLF _
    & 'pause' & @CRLF _
    & 'del "' & @ScriptFullPath & '"' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    ShellExecute(@TempDir & "\scratch.bat", @TempDir)
    EndFunc ;==>_SelfDelete

    [/autoit]

    Muß man zwar nocheinmal eine taste drücken aber es ist sicher das das Script beendet ist!

    Edit bernd670: Tags korrigiert! Spoiler-Tags innerhalb von AutoIt-Tags sind nicht möglich!

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    Einmal editiert, zuletzt von bernd670 (26. März 2008 um 05:58)