Меню Новости Программы Статьи Форум Контакты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Статьи
 

СтатьиПрограммированиеDelphi

 

Как программе удалить саму себя?

Автор: Blacksus

В этой статье я приведу одно из решений, с помощью которого можно организовать самоудаление exe-файла программы.

Изучая вопрос самоудаления программы, я наткнулся в интернете на 2 способа сделать это в Delphi. В одном из них автор приводил ассемблерную вставку в код, в котором пытался вызвать некоторые системные функции для завершения программы и ее удаления, но как показала практика, этот способ не работоспособен, возможно, он работал на старых версиях Windows. Второй способ более прост, понятен и сам по себе не является новинкой, он заключается в создании bat-файла, в котором запускается цикл пытающийся удалить программу. Естественно программа будет удалена только после ее завершения, но кто мешает завершить ее самому после создания и запуска bat-файла?! Пример оказался работоспособен, но с большой недоработкой: если на пути к файлу встречалась папка с русскими символами или сам файл имел русские буквы в названии, то bat-файл просто не мог удалить программу. В этой статье я приведу полностью работоспособный пример, которого не останавливают на пути русские символы в названии.

Для начала нужно разобраться с русскими символами, почему из-за них такие большие проблемы?! Все дело в том, что когда с помощью Delphi записывается файл, то символы имеют стандартную кодировку Windows, но когда мы запускаем bat-файл, то он читает данные в кодировке Dos. Из-за различий кодовых таблиц и происходит такая неприятная вещь, как невозможность найти путь к файлу.

Для того чтобы правильно записать русские символы в файл, нужна специальная функция, которая будет переводить символы из одной кодировки в другую. Она представлена ниже:

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

Следующий шаг - это сама процедура самоудаления. Она представлена ниже:

Если в константе SelfDelName указать только имя файла, то bat-файл будет создан в одной папке с программой, но можно указать и полный путь, например "c:\windows\SelfDel.bat". Данная процедура довольно проста. Она создает файл с расширение bat, записывает в него команды для удаления программы и себя, а затем запускает этот файл. Команды в bat-файле сделаны таким образом, что после запуска он уйдет в цикл, в котором постоянно будет пытаться удалить программу и проверять наличие exe-файла программы, и будет завершен только после того, как программа будет завершена и удалена, после чего он удалит и себя.

Чтобы не заставлять bat-файл долго блуждать в цикле, нам нужно завершить программу после вызова процедуры самоудаления. Но это не обязательное условие, в любом случае программа будет удалена после ее завершения через любой промежуток времени. Ниже приведен пример использования процедуры:

Исходный код примера можно скачать тут, а программу тут.

Сайт создан в системе uCoz