Реферат: Как сделать чтобы запущеный exe сам себя удалил - Refy.ru - Сайт рефератов, докладов, сочинений, дипломных и курсовых работ

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

}

}