Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: 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 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
3-1135705153
jiny
2005-12-27 20:39
2006.02.26
Какую БД выбрать для создания информационной базы ?


2-1139245393
pupapumQ
2006-02-06 20:03
2006.02.26
Массив записей


2-1139815987
Bone
2006-02-13 10:33
2006.02.26
Защита


15-1138946494
Ega23
2006-02-03 09:01
2006.02.26
С Днём рождения! 3 февраля


15-1138982087
Loginov Dmitry
2006-02-03 18:54
2006.02.26
Зацените страничку :)