Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


asd ©   (2006-02-12 13:09:00) 

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


Anatoly Podgoretsky   (2006-02-13 14:35:00) [1]

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

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


Marser   (2006-02-13 11:15:00) [2]

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


AbrosimovA   (2006-02-13 11:11:00) [3]

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


AbrosimovA   (2006-02-13 11:04:00) [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.


tesseract   (2006-02-12 15:19:00) [5]


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

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


Anatoly Podgoretsky   (2006-02-12 15:17:00) [6]

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


tesseract   (2006-02-12 14:50:00) [7]

Себя ты не удалишь, как и папку в которой файл находиться. Скопируй в 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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо