![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаение программой самой себя и всей папки, в которой находится п
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);