Форум: "Основная";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизСамоудаление Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c