Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1138827650
Fenik
2006-02-02 00:00
2006.02.26
Странная местная фобия - боязнь анонимов


2-1139569245
Enki
2006-02-10 14:00
2006.02.26
Картинки и текст в одном


15-1139185823
DimonS
2006-02-06 03:30
2006.02.26
Тут такой вопросец наметился насчет выбора принтера...


15-1138950565
passlight
2006-02-03 10:09
2006.02.26
Всё-таки посадили...


9-1124963548
red_readers
2005-08-25 13:52
2006.02.26
Помогите с сюжетом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский