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

Твой пример кода работает прекрасно. НО . В пути в проге (названия каталогов) и имя самой проги не должны содержать русские буквы.

P.S. Да и чуть не забыл : измени строку

winexec(Pchar(BatchFileName),sw_hide);
winexec(Pchar(‘cmd.exe /c ‘ + BatchFileName),sw_hide);

Хотя может и в исходном виде все заработает … Можно попробовать …

Dolphin705

Здесь всё работает

Похожие статьи

  • Удалить программу после выполнения действий
  • Как открыть свойства обозревателя программно?
  • Запуск программы в определенное время
  • Консольное приложение запускающее программу
  • Как запустить программу указанную в Edit.Text

Купить рекламу на сайте за 1000 руб

Да и по любым другим вопросам пишите на почту

  • Форум Web программирование (веб)
  • Форум Python (питон)
  • Форум PHP (пхп)
  • Форум Perl (перл)
  • Форум Ruby (руби)
  • Форум JavaScript (яваскрипт)
  • Форум Ajax (аякс)
  • Форум SQL (эскюэл)
  • Форум HTML (хтмл)
  • Форум CSS (сиэсэс)
  • Форум XML (иксмл)
  • Форум JSON (джсон)
  • Форум Pascal (паскаль)
  • Форум Delphi (делфи)
  • Форум C++ (си плюс плюс)
  • Форум C++ Builder (си билдер)
  • Форум Visual C++ (визуал си)
  • Форум .NET (точка нет)
  • Форум ASP.NET (асп нет)
  • Форум Windows Forms (виндовс формс)
  • Форум базы данных ADO.NET (адо нет)
  • Форум .NET Framework WPF, UWP, WinRT, XAML ()
  • Форум Java Android (джава андроид)
  • Форум Java web (джава веб)
  • Форум Kotlin (котлин)
  • Форум Assembler (ассемблер)
  • Форум WinApi (вин апи)
  • Форум Excel (эксель)
  • Форум Word (ворд)
  • Форум Access (аксесс)
  • Форум по администрированию ОС
  • Форум по администрированию серверов и VDS
  • Форум Windows
  • Форум Ubuntu
  • Форум Android
Читайте также:
В чем методологические особенности программы социокультурные истоки

Источник: www.programmersclub.ru

КАК УДАЛИТЬ СЕБЯ ИЗ ИНТЕРНЕТА?

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

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

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

Если вы решили удалить Windows, сделайте это медленно с удовольствием, побайтно.
uses Windows, SysUtils; procedure DeleteMe; var BatchFile: TextFile; BatchFileName: string; ProcessInfo: TProcessInformation; StartUpInfo: TStartupInfo; begin BatchFileName := ExtractFilePath(ParamStr(0)) + ‘$$336699.bat’; AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile, ‘:try’); Writeln(BatchFile, ‘del «‘ + ParamStr(0) + ‘»‘); Writeln(BatchFile, ‘if exist «‘ + ParamStr(0) + ‘»‘ + ‘ goto try’); Writeln(BatchFile, ‘del «‘ + BatchFileName + ‘»‘); CloseFile(BatchFile); FillChar(StartUpInfo, SizeOf(StartUpInfo), $00); StartUpInfo.dwFlags := STARTF_USESHOWWINDOW; StartUpInfo.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(BatchFileName), nil, nil, False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo) then begin CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); end; end;

А вот тот же способ, но немного модифицированный:

program delete2; uses SysUtils, windows; var BatchFile: TextFile; BatchFileName: string; TM: Cardinal; TempMem: PChar; begin BatchFileName:=ExtractFilePath(ParamStr(0))+ ‘$$336699.bat’; AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile,’:try’); Writeln(BatchFile,’del «‘ + ParamStr(0) + ‘»‘); Writeln(BatchFile,’if exist «‘ + ParamStr(0) + ‘» goto try’); Writeln(BatchFile,’del «‘ + BatchFileName + ‘»‘); CloseFile(BatchFile); TM:=70; GetMem (TempMem,TM); GetShortPathName (pchar(BatchFileName), TempMem, TM); BatchFileName:=TempMem; FreeMem(TempMem); winexec(Pchar(BatchFileName),sw_hide); halt; end.

Статья Как программе удалить саму себя раздела Программа и Интерфейс Приложение своё может быть полезна для разработчиков на Delphi и FreePascal.

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

:: 2010-02-11 02:31:37 :: re:Как программе удалить саму себя

Способ с CreateProcess работает отлично на современных виндах, но есть одна проблема. Программа оставляет за собой «мусор» в виде сообственной директории.
Добавление:
Writeln(BatchFile,’del «‘ + ExtractFilePath(ParamStr(0)) + ‘»‘);
не решает проблему, т.к процесс cmd.exe которые запускается для выполнения ват-ника, запускается из директории приложения.

Я перенес создание бат-ника в директорию на уровень выше. И указал CreateProcess 8-й параметр вместо nil (Manual: if this parameter is NULL, the new process will have the same current drive and directory as the calling process), другую существующую директорию. Но все равно чтото еще держит и не дает убить эту 🙁

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

Источник: www.kansoftware.ru

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

Сообщений: 213

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

Здраствуйте, моя задача программно удалить себя, в поисковике нашёл несколько примеров

uses Windows, SysUtils; procedure DeleteMe; var BatchFile: TextFile; BatchFileName: string; ProcessInfo: TProcessInformation; StartUpInfo: TStartupInfo; begin < создаём бат-файл в директории приложения >BatchFileName := ExtractFilePath(ParamStr(0)) + ‘$$336699.bat’; < открываем и записываем в файл >AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile, ‘:try’); Writeln(BatchFile, ‘del «‘ + ParamStr(0) + ‘»‘); Writeln(BatchFile, ‘if exist «‘ + ParamStr(0) + ‘»‘ + ‘ goto try’); Writeln(BatchFile, ‘del «‘ + BatchFileName + ‘»‘); CloseFile(BatchFile); FillChar(StartUpInfo, SizeOf(StartUpInfo), $00); StartUpInfo.dwFlags := STARTF_USESHOWWINDOW; StartUpInfo.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(BatchFileName), nil, nil, False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo) then begin CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess); end; end;
program delete2; uses SysUtils, windows; var BatchFile: TextFile; BatchFileName : string; TM : Cardinal; TempMem : PChar; begin BatchFileName:=ExtractFilePath(ParamStr(0))+ ‘$$336699.bat’; AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile,’:try’); Writeln(BatchFile,’del «‘ + ParamStr(0) + ‘»‘); Writeln(BatchFile,’if exist «‘ + ParamStr(0) + ‘» goto try’); Writeln(BatchFile,’del «‘ + BatchFileName + ‘»‘); CloseFile(BatchFile); TM:=70; GetMem (TempMem,TM); GetShortPathName (pchar(BatchFileName), TempMem, TM); BatchFileName:=TempMem; FreeMem(TempMem); winexec(Pchar(BatchFileName),sw_hide); halt; end.
procedure DeleteSelf; var module: HModule; buf: array[0..MAX_PATH — 1] of char; p: ULong; hKrnl32: HModule; pExitProcess, pDeleteFile, pFreeLibrary: pointer; begin module := GetModuleHandle(nil); GetModuleFileName(module, buf, SizeOf(buf)); CloseHandle(THandle(4)); p := ULONG(module) + 1; hKrnl32 := GetModuleHandle(‘kernel32’); pExitProcess := GetProcAddress(hKrnl32, ‘ExitProcess’); pDeleteFile := GetProcAddress(hKrnl32, ‘DeleteFileA’); pFreeLibrary := GetProcAddress(hKrnl32, ‘FreeLibrary’); asm lea eax, buf push 0 push 0 push eax push pExitProcess push p push pDeleteFile push pFreeLibrary ret end; end;

проблема в том, что ни один код не работает.
помогите довести до ума, спс!

Источник: www.programmersforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru