Вниз
Скачать: CL | DM;

Самоудаление   Найти похожие ветки 

← →
Calibr2   (2006-07-20 21:44) [0]

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


← →
Мефисто   (2006-07-20 21:50) [1]

Вот сейчас придут и попинают...


← →
RzCoDer ©   (2006-07-20 21:58) [2]

Программа не может удалить сама себя, т.к. нельзя удалять приложения загруженные в память. А вот дать такое задание какому нить левому системному исполнителю можно.


← →
Джо ©   (2006-07-20 21:58) [3]

Можно воспользоваться докумментированным способом, функцией MoveFileEx.
Задаем следующие параметры:
MoveFileEx (PChar(Application.ExeName),nil,MOVEFILE_DELAY_UNTIL_REBOOT)

При первой же перегрузке ОС файл FileName будет удален. Пользователь, в контексте которого выполняется данный код, должен иметь права локального администратора.


← →
Джо ©   (2006-07-20 22:01) [4]

Да, еще. Все это работает начиная с NT. В 98 аналогичную задачу можно решить создав файл WININIT.INI в директории Windows, если файл уже существует, просто добавить в него строку такого образца в секции [rename]:
NULL=SourceFileName


← →
tesseract ©   (2006-07-20 22:03) [5]

> [3] Джо ©   (20.07.06 21:58)


А был же вроде трюк - переименовать себя и удалить, но вроде в XP не работал.


← →
Anatoly Podgoretsky ©   (2006-07-20 22:41) [6]

Джо ©   (20.07.06 21:58) [3]
А иногда система годами не перезагружается, особенно в свете hibernate


← →
Джо ©   (2006-07-20 22:45) [7]

> [6] Anatoly Podgoretsky ©   (20.07.06 22:41)

Значит, нужно поступить вежливо и вывести пользователю окно с "Перегрузите, пожалуйста, компьютер" :)


← →
Andy BitOff ©   (2006-07-20 23:02) [8]

А я вот узнал, что строка "del setup.bat >NUL" в bat"нике setup.bat удалит его, тем самым можно удалить себя создав батник.

P.S. Я знаю что земля не круглая (с)


← →
_mik ©   (2006-07-20 23:07) [9]

вот пример

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;




Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.028 c
9-1134244796
4ECHOK
2005-12-10 22:59
2006.09.03
Как вписать FreeForm в DummyCube ?


2-1155186988
max1991
2006-08-10 09:16
2006.09.03
CheckListBox


3-1151472452
Mishenka
2006-06-28 09:27
2006.09.03
Как сделать сортировку по вычисляемому и подстановочному полям?


2-1155462921
Triton
2006-08-13 13:55
2006.09.03
Модератор - чудак на букву "М"


2-1155722658
SamProf
2006-08-16 14:04
2006.09.03
Как создать MDI Child форму из DLL ки




   Наверх