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