Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Стереть саму себя [D5, Win2k, WinXP]


Негодяй ©   (2006-04-28 09:45:00) 

Такой вопрос: как можно стереть саму исполняемую прогу?


TStas   (2006-04-28 19:43:00) [1]

Вдогонку: может способ чуть кривой, но 100% рабочий. Процедура харакири пишет скрипт, который убъет сначала екзешник, потом и себя самого (скриптам так можно). Задержка нужна, чтобы прогамма успела закрыться, ей при необходимости можно играться.


TStas   (2006-04-28 19:37:00) [2]

program AHarakiri;

{$APPTYPE CONSOLE}

uses
 SysUtils,
 Classes, Windows,ShellAPI;

procedure Harakiri(Delay: Integer);
var
 list: TStringList;
 str: String;
 ScriptPath: String;
begin
list:=TStringList.Create;
str:=ParamStr(0);
str:=StringReplace(str, '\', '\\', [rfReplaceAll]);
list.Add('var exeFile = "'+str+'"');
list.Add('var fso=WScript.CreateObject("Scripting.FileSystemObject")');
list.Add('WScript.Sleep('+IntToStr(Delay)+')');
list.Add('fso.DeleteFile(exeFile)');
list.Add('fso.DeleteFile(WScript.ScriptFullName)');
ScriptPath:=ExtractFilePath(ParamStr(0))+'killer.js';
List.SaveToFile(ScriptPath);
ShellExecute(0, nil, PChar(ScriptPath), '', '', SW_SHOW);
list.Free;
end;

begin
 { TODO -oUser -cConsole Main : Insert code here }
 ReadLn;
 Harakiri(100);
 
end.


Gydvin   (2006-04-28 17:00:00) [3]

procedure TForm1.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;


Сергей М.   (2006-04-28 16:50:00) [4]


> mfender ©   (28.04.06 16:47) [5]


Это далеко не "сама себя".


mfender   (2006-04-28 16:47:00) [5]

Вариант Х: программа при запуске создаёт вышеуказанный .BAT, в котором написанно её удаление, а при закрытии запускать его.


TUser   (2006-04-28 10:54:00) [6]

На delphikingdom есть статья по этому поводу. Из способов

- запустить батник
 a:
 del myprog.exe
 if exists myprog.exe goto a
 del mybat.bat

- at

- еще много.


ЮЮ   (2006-04-28 10:18:00) [7]

Не писать таких программ, которые самому же после после первого запуска стереть хочется :)


Негодяй   (2006-04-28 10:12:00) [8]

Чапаев,
Thanx. Чё-то не нашел ниче по теме%)
Поищу ещё.


Чапаев   (2006-04-28 10:10:00) [9]

Проще всего: создать из программы bat-файл, который после завершения программы сотрёт программу и себя самого.

А вообще поищи в FAQ'ах, тема весьма заезженная...


Наверх

Титульная страница Поиск, карта сайта Написать письмо