Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Eine exe löscht sich selbst! (https://www.delphipraxis.net/120598-eine-exe-loescht-sich-selbst.html)

AlexII 13. Sep 2008 11:54


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;

mkinzler 13. Sep 2008 11:57

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.

AlexII 13. Sep 2008 12:01

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.

mkinzler 13. Sep 2008 12:03

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. :)

AlexII 13. Sep 2008 12:09

Re: Eine exe löscht sich selbst!
 
Ja direkt nicht, ist klar, aber indirekt doch.

Bernhard Geyer 13. Sep 2008 13:27

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.

AlexII 13. Sep 2008 13:37

Re: Eine exe löscht sich selbst!
 
Kann man die Funktion vielleicht erweitern, dass sie in allen Verzeichnissen gut funktioniert?

mkinzler 13. Sep 2008 13:39

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

AlexII 13. Sep 2008 13:44

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?

API 13. Sep 2008 13:53

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;

mkinzler 13. Sep 2008 13:55

Re: Eine exe löscht sich selbst!
 
Dann bist du lokaler Admin. Das reicht aber unter Vista auch nicht mehr aus. Ohne Adminrechte besitzst man keine Schreibrechte im Programmverzeichnis. Das Programm kann deshalb dort keine Batchdatei erstellen und auch ein Erstellen an einem Ort mit Schreibrechten würde nichts bringen, da die Batch dann die Original-Exe nicht löschen könnte.

Spiderpig_GER_15 14. Sep 2008 14:26

Re: Eine exe löscht sich selbst!
 
ich könnte sowas ähnliches für ein SetUp gebrauchen, nachdem mein Programm installiert ist, soll sich das Setup löschen, üblicherweise befindet sich diese auf dem Desktop, funktioniert das löschen da? und wie sieht's mit einem USB Stick aus?

SubData 14. Sep 2008 15:06

Re: Eine exe löscht sich selbst!
 
Dann macht vorher jemand den Schreibschutz auf den USB Stick und fertig...

Luckie 14. Sep 2008 19:18

Re: Eine exe löscht sich selbst!
 
Warm sollte ich mein Setup lsöchen wollen? Eventuell will es der Kunde noch woanders installieren oder irgendwo sichern, damit er es später wieder installieren kann.
Was passiert bei dir? Der Benutzer installiert das Programm und wundert sich, dass das Setup weg ist.

Dunkel 14. Sep 2008 19:35

Re: Eine exe löscht sich selbst!
 
Zitat:

Zitat von Luckie
Der Benutzer installiert das Programm und wundert sich, dass das Setup weg ist.

Der gleiche Mist passiert beim Installieren von CAB-Datein auf einem PPC. Ich könnte jedesmal kotzen, wenn ich nicht daran gedacht habe, eine Arbeitskopie zu erstellen und zu installieren. Wer denkt sich so einen Unsinn aus?! Ach ja, unter unter anderem Spiderpig_GER_15 :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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