РефератыИнформатикаКаКак сделать чтобы запущеный exe сам себя удалил

Как сделать чтобы запущеный exe сам себя удалил


Как сделать чтобы запущеный 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


}


}


Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Как сделать чтобы запущеный exe сам себя удалил

Слов:369
Символов:3706
Размер:7.24 Кб.