Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизУдаение программой самой себя и всей папки, в которой находится п Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c