46. FAQ o Win API

Q> How to erase itself? 
A> This program destroys itself. 
#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