46. FAQ o Win API

Q> Как стереть самого себя?
A> Эта программа уничтожает саму себя.
#include <windows.h>
#include <stdio.h>

void DelSelf(void)
{
	char modulename[MAX_PATH];
	char batfile[MAX_PATH];
	char batlines[MAX_PATH*4];
	LPSTR tempdir;
	char Buf[MAX_PATH]; 

	GetModuleFileName(NULL,modulename,MAX_PATH);

	tempdir = ((GetEnvironmentVariable(TEXT("TEMP"),
        Buf, MAX_PATH) > 0) ? Buf : NULL);

	strcpy(batfile,tempdir);
	strcat(batfile,"\\");
	strcat(batfile,"delself.bat");
	strcpy(batlines,"@echo off\n:try\ndel ");
	strcat(batlines,modulename);
	strcat(batlines,"\nif exist ");
	strcat(batlines,modulename);
	strcat(batlines," goto try\n");
	strcat(batlines,"del ");
	strcat(batlines,batfile);

	DWORD NOfBytes;

	HANDLE hbf= CreateFile(batfile, GENERIC_WRITE | GENERIC_READ,
	FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
	FILE_ATTRIBUTE_NORMAL, NULL);

    	WriteFile(hbf,batlines,strlen(batlines),&NOfBytes, NULL);
	CloseHandle(hbf);

	STARTUPINFO         si;
	PROCESS_INFORMATION pi;
	ZeroMemory( &si, sizeof(si) );
	si.cb = sizeof(si);
	si.wShowWindow = SW_HIDE;
	si.dwFlags = STARTF_USESHOWWINDOW;
	
	CreateProcess(
					NULL,
					batfile,
					NULL,
					NULL,
					FALSE,
					IDLE_PRIORITY_CLASS|DETACHED_PROCESS,
					NULL,
					NULL,
					&si,
					&pi);

}
void main()
{
	DelSelf();
}

2000(c) DM

Электронные Книги по компьютерным программам
На правах рекламы:
Логин
Пароль
Запомнить меня