AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine exe löscht sich selbst!

Ein Thema von AlexII · begonnen am 13. Sep 2008 · letzter Beitrag vom 14. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 12:54
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 12:57
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.
Markus Kinzler
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 13:01
Dann kann man den Code ruhig verwenden, wie ich verstehe? Ich hab aber gelesen, dass man das nie hin bekommt, aber es geht doch.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 13:03
Eine Exe kann sich ja auch nicht selber löschen, über den Umweg der batch geht es aber.
Markus Kinzler
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 13:09
Ja direkt nicht, ist klar, aber indirekt doch.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 14:27
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 14:37
Kann man die Funktion vielleicht erweitern, dass sie in allen Verzeichnissen gut funktioniert?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 14:39
Nein, weil das Problem nicht am Tool liegt, sondern an den Rechten des angemeldeten Benutzers auf das Verzeichnis, in dem die Anwendung liegt
Markus Kinzler
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 14:44
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?
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#10

Re: Eine exe löscht sich selbst!

  Alt 13. Sep 2008, 14:53
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz