Главная страница
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.055 c
15-1155239556
TGX
2006-08-10 23:52
2006.09.03
Проблемы с монитором!


2-1155280014
D@Nger
2006-08-11 11:06
2006.09.03
Как узнать расширение файла по его имени?


2-1155712068
gdaujk
2006-08-16 11:07
2006.09.03
Нужен компонент


1-1153456424
Fynjy1984_
2006-07-21 08:33
2006.09.03
WebBrowser и TabSheet


1-1153803713
Zilog_
2006-07-25 09:01
2006.09.03
Как правильно перевести с С на Делфи?