![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление программы из себя [D6, Win2k]
fishca © (2003-02-20 10:56:00)Рабочий примерчик удаления программы из себя:
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;
...просто были мнения что удалить программу во время работы - просто нельзя.
fishca (2003-02-20 11:20:00) [1]Хотя для Unix это в другом форуме должно быть...
fishca (2003-02-20 11:16:00) [2]Конкретно под Windows98/2000 работает. Простым программерам в принципе и больше не надо. Под Unix можно тоже переписать, если у кого желание появится(ну это уже для продвинутых программеров).
Anatoly Podgoretsky (2003-02-20 11:02:00) [3]Это не рабочий пример, работает только на некотором подмножестве ОС