Решение задач: как программе удалить саму себя или как изменить название исполняемого файла

Источник: pblog
Crivel

Введение

В интернете просматривая форумы по программированию я наталкивался на вопросы связанные c вопросом "Как программу заставить удалить или переименовать себя во время исполнения". В этой статье описывается самый элементарный способ.

Что нужно?

Borland Delphi желательно 7 - требует установки
Блокнот (notepad.exe) - стоит на всех компьютерах с Windows
cmd.exe - стоит на всех компьютерах с Windows

Начинаем

Зачем нам нужен блокнот и cmd.exe спросите вы?
Мы для решения этой задачи будем использовать Пакетный файл, подробнее: В Википедии
Функция для удаления:

function RemoveApp : boolean;

var

batfile : TextFile; // переменная файла

begin

try // блок try..except для обработки исключений (ошибок)

RemoveApp := true; // в результат возвращаемой функции ставим значение: истина

AssignFile(batfile,'Del.bat'); // присваиваем файл переменной

ReWrite(batfile); // Открываем для перезаписи (если существует файл перезапишится, иначе создастся)

ChDir(ExtractFilePath(ParamStr(0))); // меняем текущую директорию (с которой работает программа) на директорию в которой находится исполняемый файл

WriteLn(batfile,'del '+ExtractFileName(ParamStr(0))); // записываем в файл команду удаления del

WriteLn(batfile,'del Del.bat'); // пишем это для самоуничтожения пакетного файла

CloseFile(batfile); // закрываем файл

WinExec('Del.bat',SW_SHOW); // запускаем пакетный файл который был создан программой

ExitProcess(0); // завершаем программу

except

RemoveApp := false; // если происходит ошибка возвращаем ложь

end;

end;

Функция для переименования:

function RenameApp(newname : string) : boolean;

var

batfile : TextFile; // переменная файла

begin

try // блок try..except для обработки исключений (ошибок)

RenameApp := true; // в результат возвращаемой функции ставим значение: истина

AssignFile(batfile,'Rem.bat'); // присваиваем файл переменной

ReWrite(batfile); // Открываем для перезаписи (если существует файл перезапишется, иначе создастся)

ChDir(ExtractFilePath(ParamStr(0))); // меняем текущую директорию (с которой работает программа) на директорию в которой находится исполняемый файл

WriteLn(batfile,'ren '+ExtractFileName(ParamStr(0))+' '+newname); // записываем в файл команду переименовывание ren

WriteLn(batfile,'del Rem.bat'); // пишем это для самоуничтожения пакетного файла

CloseFile(batfile); // закрываем файл

WinExec('Rem.bat',SW_SHOW); // запускаем пакетный файл который был создан программой

ExitProcess(0); // завершаем программу

except

RenameApp := false; // если происходит ошибка возвращаем ложь

end;

end;

Заключение

Как видите ничего сложного тут нет. Эти функции не требуют ни каких дополнительных модулей.

Конец

Если будут какие то проблемы, непонятки то пишите в комментарии. С удовольствием отвечу. Желаю вам успеха в программировании!

 


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=21459