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)

Электронные Книги по компьютерным программам
На правах рекламы:
Регистрация. | Забыли пароль?
Логин
Пароль
Запомнить меня