Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: 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 вся ветка

Текущий архив: 2006.09.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
15-1155304386
evvcom
2006-08-11 17:53
2006.09.03
Видали картинки?


2-1155117043
Sistr
2006-08-09 13:50
2006.09.03
чернобелое -> цветное


9-1134279157
GRAVIX
2005-12-11 08:32
2006.09.03
Спрайт в OPENGL


9-1132970392
Шейдер
2005-11-26 04:59
2006.09.03
Как проверить поддерживает ли видеокарта шейдеры?


15-1154654602
DimonS
2006-08-04 05:23
2006.09.03
Создание панели инструментов