Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Как сделать чтобы запущеный exe сам себя удалил?
Шитц Виталий
Как сделать чтобы запущеный exe сам себя удалил? Можно сгегерировать BAT-файл и выполнить его, а можно и по другому:
Этот код требует, чтобы была определена переменная окружения COMSPEC, работает на всех ОС Windows.\
После вызова функции нужно немедленно выходить из программы, иначе не сработает.
Автор Tony Varnas.
BOOL SelfDelete() { TCHAR szFile[MAX_PATH], szCmd[MAX_PATH]; if((GetModuleFileName(0,szFile,MAX_PATH)!=0) && (GetShortPathName(szFile,szFile,MAX_PATH)!=0)) { lstrcpy(szCmd,"/c del "); lstrcat(szCmd,szFile); lstrcat(szCmd," >> NUL"); if((GetEnvironmentVariable("ComSpec",szFile,MAX_PATH)!=0) && ((INT)ShellExecute(0,0,szFile,szCmd,0,SW_HIDE)>32)) return TRUE; } return FALSE; } |
Следующий код работает только под NT, автор Gary Nebbett:
include <windows.h>
int main(int argc, char *argv[])
{
char buf[MAX_PATH];
HMODULE module;
module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
CloseHandle((HANDLE)4);
__asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}
Ну а это вариант предыдущего, но под Win9x, автор Tony Varnas.
int main(int argc, char *argv[])
{
char buf[MAX_PATH];
HMODULE module;
module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
__asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push FreeLibrary
ret
}
return 0;
}
Ну и два последних в одной функции:
void SelfDelete()
{
char buf[MAX_PATH];
HMODULE module;
DWORD fnFreeOrUnmap;
module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
// На случай Win9x
if(0x80000000 & GetVersion())
{
fnFreeOrUnmap = FreeLibrary;
}
// для ядра WinNT
else
{
fnFreeOrUnmap = UnmapViewOfFile;
CloseHandle((HANDLE)4);
}
__asm
{
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push fnFreeOrUnmap
ret
}
}
Список литературы
Для подготовки данной работы были использованы материалы с сайта http://www.rsdn.ru/