|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
[ Исходник ] - Программа удаляет саму себя
Имя: Усан
E-mail: erdyneev.ra@yandex.ru Описание исходника: Пример самоуничтожения программы при помощи bat-файла (программа удаляет саму себя). Искал в нэте подобную программу, нашел но не рабочую, поэтому выкладываю этот исходник ) Он прокомментирован и достаточно прост, поэтому проблем возникнуть не должно. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; BAT: string; implementation {$R *.dfm} procedure TForm1.FormDestroy(Sender: TObject); begin winexec(Pchar(BAT),sw_hide); // чтобы не грузить зря систему))) // Но если Вы уверены в том что программа всё равно должна самоуничтожиться end; procedure TForm1.Button1Click(Sender: TObject); var kesh: TextFile; begin // Создаём bat-файл в папке с программой с именем: имя программы + .bat BAT:=ExtractFileName(ParamStr(0))+'.BAT'; // AssignFile(kesh, BAT); Rewrite(kesh); Writeln(kesh,':try' +#13+#10+'del "' + ExtractFileName(ParamStr(0)) + '"' +#13+#10+'if exist "' + ExtractFileName(ParamStr(0)) + '" goto try' +#13+#10+'del "' + ExtractFileName(BAT) + '"'); CloseFile(kesh); //Если не известно будет ли уничтожаться форма то МОЖНО удалить из "winexec(Pchar(BAT),sw_hide);" из события формы "OnDestroy" //и соостветственнно "вернуть на место" закоментеннный "winexec(Pchar(BAT),sw_hide);": //winexec(Pchar(BAT),sw_hide); close; end; procedure TForm1.Button2Click(Sender: TObject); var kesh: TextFile; begin // Создаём bat-файл в папке с программой с именем: имя программы + .bat BAT:=ExtractFileName(ParamStr(0))+'.BAT'; // AssignFile(kesh, BAT); Rewrite(kesh); Writeln(kesh,':try' +#13+#10+'del "' + ExtractFileName(ParamStr(0)) + '"' +#13+#10+'if exist "' + ExtractFileName(ParamStr(0)) + '" goto try' +#13+#10+'del "' + ExtractFileName(BAT) + '"'); CloseFile(kesh); end; end. |
Этот пользователь сказал Спасибо Admin за это полезное сообщение: | ||
Ildar-tsr (21.05.2012)
|
#2
|
||||
|
||||
вот ещё вариант подобного момента:
Код:
uses ShellApi, ShlObj.... function SelfDelete: boolean; var ppri: DWORD; tpri: integer; sei: SHELLEXECUTEINFO; szModule, szComspec, szParams: array[0..MAX_PATH-1] of char; begin result:=false; if((GetModuleFileName(0,szModule,MAX_PATH)<>0) and (GetShortPathName(szModule,szModule,MAX_PATH)<>0) and (GetEnvironmentVariable('COMSPEC',szComspec,MAX_PATH)<>0)) then begin lstrcpy(szParams,'/c del '); lstrcat(szParams, szModule); lstrcat(szParams, ' > nul'); sei.cbSize := sizeof(sei); sei.Wnd := 0; sei.lpVerb := 'Open'; sei.lpFile := szComspec; sei.lpParameters := szParams; sei.lpDirectory := nil; sei.nShow := SW_HIDE; sei.fMask := SEE_MASK_NOCLOSEPROCESS; ppri:=GetPriorityClass(GetCurrentProcess); tpri:=GetThreadPriority(GetCurrentThread); SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); try if ShellExecuteEx(@sei) then begin SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS); SetProcessPriorityBoost(sei.hProcess,TRUE); SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,@szModule,nil); result:=true; end; finally SetPriorityClass(GetCurrentProcess, ppri); SetThreadPriority(GetCurrentThread, tpri) end end end; применяется: Код:
if not SelfDelete then Exit else halt; уволен в запас!!! |