![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Стереть саму себя [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'ах, тема весьма заезженная...