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