Реферат по предмету "Программирование"


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



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/


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.