Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Удалить свою программу после ее завершения

Delphi , Программа и Интерфейс , Приложение своё

Удалить свою программу после ее завершения

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure DeleteEXE;

   function GetTmpDir: string;
   var
     pc: PChar;
   begin
     pc := StrAlloc(MAX_PATH + 1);
     GetTempPath(MAX_PATH, pc);
     Result := string(pc);
     StrDispose(pc);
   end;

   function GetTmpFileName(ext: string): string;
   var
     pc: PChar;
   begin
     pc := StrAlloc(MAX_PATH + 1);
     GetTempFileName(PChar(GetTmpDir), 'uis', 0, pc);
     Result := string(pc);
     Result := ChangeFileExt(Result, ext);
     StrDispose(pc);
   end;

    var
   batchfile: TStringList;
   batchname: string;
 begin
   batchname := GetTmpFileName('.bat');
   FileSetAttr(ParamStr(0), 0);
   batchfile := TStringList.Create;
   with batchfile do
   begin
     try
       Add(':Label1');
       Add('del "' + ParamStr(0) + '"');
       Add('if Exist "' + ParamStr(0) + '" goto Label1');
       Add('rmdir "' + ExtractFilePath(ParamStr(0)) + '"');
       Add('del ' + batchname);
       SaveToFile(batchname);
       ChDir(GetTmpDir);
       ShowMessage('Uninstalling program...');
       WinExec(PChar(batchname), SW_HIDE);
     finally
       batchfile.Free;
     end;
     Halt;
   end;
 end;

Программа на Delphi, написанная на языке Pascal, которая удаляет себя после выполнения. Вот разбивка кода:

Функции

Программа определяет две функции: GetTmpDir и GetTmpFileName.

  • GetTmpDir: Функция возвращает путь временной директории с помощью функции GetTempPath из Windows API.
  • GetTmpFileName: Функция генерирует имя временного файла с указанным расширением ('.bat') в временной директории. Она использует функцию GetTempFileName для генерации имени и затем модифицирует его, изменяя расширение с помощью функции ChangeFileExt.

Основная программа

Основная программа определена как процедура под названием DeleteEXE. Она выполняет следующие действия:

  1. Генерирует имя временного файла batch с расширением .bat.
  2. Устанавливает атрибуты оригинального исполняемого файла в 0 (т.е., удаляет его).
  3. Создает объект TStringList для хранения команд batch-файла.
  4. Добавляет несколько команд к файлу batch:
    • :Label1: Это метка, которая будет использоваться позднее в файле batch.
    • del " + ParamStr(0) + ": Удаляет оригинальный исполняемый файл.
    • if Exist " + ParamStr(0) + " goto Label1: Проверяет, существует ли файл, и переходит к метке Label1, если он есть.
    • rmdir " + ExtractFilePath(ParamStr(0)) + ": Удаляет директорию, содержащую оригинальный исполняемый файл.
    • del " + batchname + ": Удаляет временный файл batch-файла сам себя.
  5. Сохраняет команды batch-файла в файл с генерирующимся именем.
  6. Изменяет текущую рабочую директорию на временную директорию.
  7. Показывает сообщение о том, что программа удаляет себя.
  8. Исполняет временный файл batch с помощью функции WinExec, которая запускает его в скрытом окне (т.е., без отображения любого UI).
  9. Останавливает выполнение программы с помощью процедуры Halt.

Альтернативное решение

Хотя эта программа работает, есть некоторые потенциальные проблемы с ее дизайном:

  • Она зависит от временной директории, которая может быть удалена до тех пор, пока программа не закончит выполнение.
  • Файл batch выполняется в скрытом окне, что может привести к неожиданному поведению, если что-то пойдет не так во время выполнения.
  • Программа не обеспечивает обработку ошибок для случаев, когда файл batch не может быть создан или запущен.

Альтернативное решение могло бы заключаться в использовании более надежного подхода к удалению исполняемого файла, например, с помощью функции FileDelete из Delphi RTL. Это бы устранило необходимость создания временного файла batch и его выполнения в скрытом окне. Кроме того, вы могли бы добавить обработку ошибок для обеспечения успешного удаления или предоставления информативного сообщения об ошибке, если что-то пойдет не так.

Вот пример, как можно переписать программу с использованием FileDelete:

procedure DeleteEXE;
begin
  FileDelete(ParamStr(0));
  ShowMessage('Uninstalling program...');
end;

Этот код намного проще и надежнее, чем оригинальное реализация.

Удаление программы после ее завершения: код на Delphi, созданный для автоматического удаления файла и его папки после выполнения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:48:50/0.005774974822998/1