Вниз
Скачать: CL | DM;

Удаение программой самой себя и всей папки, в которой находится п   Найти похожие ветки 

← →
asd ©   (2006-02-12 13:09) [0]

Здравствуйте, уважаемые мастера Delphi. Напишите, пожалуйста, код, как программе удалить саму себя и всю папку с её содержимым, в которой находится программа.


← →
tesseract ©   (2006-02-12 14:50) [1]

Себя ты не удалишь, как и папку в которой файл находиться. Скопируй в temp папку exe со следующим кодом. Запусти его через ShellExecute и выйди немедля (желательно добавить код который будет следить за тем что главная программа закончила исполнение, через Mutex например)

var sr:TSearchRec;
   MyName:string;
   MyDir:string;
   FileAttrs:integer;
begin
 FileAttrs:=faAnyFile;
 MyDir:=\\ папка с твоей программой
// Удаляем всё окромя exe
  if FindFirst(MyDir+"*.*", FileAttrs, sr) = 0 then
   begin
     repeat
      DeleteFile(MyDir+sr.Name);
     until FindNext(sr) <> 0;
     FindClose(sr);
RemoveDir(MyDir);


← →
Anatoly Podgoretsky ©   (2006-02-12 15:17) [2]

tesseract ©   (12.02.06 14:50) [1]
Теперь тоже самое, только для TEMP


← →
tesseract ©   (2006-02-12 15:19) [3]


> Теперь тоже самое, только для TEMP

Temp как правило не чистят даже Wise с InstallShield.


← →
AbrosimovA   (2006-02-13 11:04) [4]

program delete2;

uses
SysUtils, windows, Forms;

var
BatchFile: TextFile;
BatchFileName,TempFileName: string;
TM: Cardinal;
TempMem: PChar;
TempPath: PChar;

function WinToDos(const s : string) : string;
var dest : string;
begin
 setLength(dest, length(s)+1);
 AnsiToOem(@s[1], @dest[1]);
 Result:=StrPas(PChar(dest));
end;

begin
GetTempPath(255,TempPath);
SetCurrentDirectory(TempPath);
TempFileName:=TempPath + "yes";
AssignFile(BatchFile, TempFileName);
Rewrite(BatchFile);
Writeln(BatchFile,"y");
CloseFile(BatchFile);
BatchFileName:=TempPath + "$$1234.bat";
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile,"rmdir /S "" + WinToDos(ExtractFilePath(Application.ExeName)) + ""  <yes");
Writeln(BatchFile,"del "" + WinToDos(TempFileName) + """);
Writeln(BatchFile,"del "" + WinToDos(BatchFileName) + """);
CloseFile(BatchFile);
TM:=70;
GetMem (TempMem,TM);
GetShortPathName (pchar(BatchFileName), TempMem, TM);
BatchFileName:=TempMem;
FreeMem(TempMem);
winexec(Pchar(BatchFileName),sw_hide);
halt;
end.


← →
AbrosimovA   (2006-02-13 11:11) [5]

Комментарий: Предыдущий пример работает под Win2K и WinXP


← →
Marser ©   (2006-02-13 11:15) [6]

Гораздо проще соответствующую команду занести в раздел RunOnce (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce) системного реестра. Тогда она выполнится один раз и автоматически оттуда удалится.


← →
Anatoly Podgoretsky ©   (2006-02-13 14:35) [7]

tesseract ©   (12.02.06 15:19) [3]
А я думал, что ты скажешь, что про TEMP не спрашивали.

Автор есть такая штука как bat файлы, их можно удалять во время исполнения из них команд. Удаляй папку и bat файл во время исполнения. bat файл можешь иметь или уже готовым или генерировать его динамически.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
15-1139136957
Volf_555
2006-02-05 13:55
2006.02.26
Как восстановить контекстное меню для файлов!?


2-1139773723
Непонятка
2006-02-12 22:48
2006.02.26
Как вызвать процедуру?


15-1138823560
Piter
2006-02-01 22:52
2006.02.26
Что за формат такой bz2 и как работать с ним в Delphi?


2-1139341472
drink
2006-02-07 22:44
2006.02.26
Глюк в ДБГрид.


1-1138032968
DelphiLexx
2006-01-23 19:16
2006.02.26
TChart и Series в стили Point




   Наверх