![]() |
Eine exe löscht sich selbst!
Hallo ich hab folgenden Code gefunden, eine exe Datei bzw. Programm löscht sich selbst. Ich selber verstehe den Code nicht, deswegen frage ich was hält ihr davon? Wird wirklich alles gelöscht?
Delphi-Quellcode:
procedure SelfEfface;
var F: Textfile; begin AssignFile(F,Changefileext(Paramstr(0),'.bat')); Rewrite(F); Writeln(F,':1'); Writeln(F, Format('Erase "%s"',[Paramstr(0)])); Writeln(F, Format('If exist "%s" Goto 1',[Paramstr(0)])); Writeln(F, Format('Erase "%s"',[ChangeFileExt(Paramstr(0),'.bat')])); CloseFile(F); WinExec(PChar(ChangeFileExt(Paramstr(0),'.bat')),SW_HIDE); Halt; end; procedure TForm1.Button1Click(Sender: TObject); begin SelfEfface; end; |
Re: Eine exe löscht sich selbst!
Es wird eine .bat erzeugt dann wird die bat gestartet und das Programm beendet. Die Batch welche versucht solange die Exe zu löschen, bis das erfolgreich ist. Anschliessend löscht sie sich selber.
|
Re: Eine exe löscht sich selbst!
Dann kann man den Code ruhig verwenden, wie ich verstehe? Ich hab aber gelesen, dass man das nie hin bekommt, aber es geht doch.
|
Re: Eine exe löscht sich selbst!
Eine Exe kann sich ja auch nicht selber löschen, über den Umweg der batch geht es aber. :)
|
Re: Eine exe löscht sich selbst!
Ja direkt nicht, ist klar, aber indirekt doch.
|
Re: Eine exe löscht sich selbst!
Diese Lösung schläg aber auch fehle wenn die Exe in Verzeichnissen mit beschränkten Zugriff liegt (C:\Programme\...). Dann nützt dir auch eine Batch-Datei nichts.
|
Re: Eine exe löscht sich selbst!
Kann man die Funktion vielleicht erweitern, dass sie in allen Verzeichnissen gut funktioniert?
|
Re: Eine exe löscht sich selbst!
Nein, weil das Problem nicht am Tool liegt, sondern an den Rechten des angemeldeten Benutzers auf das Verzeichnis, in dem die Anwendung liegt
|
Re: Eine exe löscht sich selbst!
Welche Fehlermeldung kommt denn? Hab XP und bei mir geht's überall.
Da wird bestimmt gefragt, ob man die bat Datei ausführen soll oder nicht, oder doch nicht? Wenn ja einfach erlauben und die bat erledigt ihre Sache, oder? |
Re: Eine exe löscht sich selbst!
Hi, die .bat könnte auch ins temp-Verzeichnis geschrieben werden.
Delphi-Quellcode:
uses
ShellAPI; procedure DeleteSelf; function GetTmpDir: string; var pc: PChar; begin pc := StrAlloc(MAX_PATH + 1); GetTempPath(MAX_PATH, pc); Result := string(pc); StrDispose(pc); end; function GetTmpFileName(ext: string): string; var pc: PChar; begin pc := StrAlloc(MAX_PATH + 1); GetTempFileName(PChar(GetTmpDir), 'DeleteSelf', 0, pc); Result := string(pc); Result := ChangeFileExt(Result, ext); StrDispose(pc); end; var BatchFile: TStringList; BatchFileName: string; begin BatchFileName := GetTmpFileName('.bat'); FileSetAttr(ParamStr(0), 0); BatchFile := TStringList.Create; with BatchFile do begin try Add('@echo off'); Add(':retry'); Add(Format('Erase "%s"', [ParamStr(0)])); Add(Format('If exist "%s" Goto retry', [ParamStr(0)])); Add(Format('Erase "%s"', [BatchFileName])); SaveToFile(BatchFileName); ShellExecute(0, 'Open', PChar(BatchFileName), nil, nil, SW_HIDE); finally BatchFile.Free; end; Halt; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz