Как сделать чтобы запущеный exe сам себя удалил? (работа 1)
Как сделать чтобы запущеный 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 } } |
Список литературы
Для подготовки данной применялись материалы сети Интернет из общего доступа