C语言实现程序自删除

KilluaZoldyck 2020-06-06

思路:

创建一个批处理文件,然后在程序最后创建新的进程延时一段时间后来执行这个批处理文件来删除该程序,并利用批处理命令“del %0”来删除批处理文件自身。

整体代码如下:

#include<stdlib.h>
#include<stdio.h>
#include<Windows.h>
void creatbat(char *name)//创建批处理文件
{
    FILE* fp = NULL;
    fopen_s(&fp,"a.bat", "w+");
    char cmd_code[1024] = "@echo off\ntimeout -t 1 \ndel ";
    strcat_s(cmd_code,name);
    strcat_s(cmd_code, ".exe\ndel %0");
    fputs(cmd_code, fp);
    fclose(fp);
}
char* Get_exe_NAME()
{
    char filepath[1024] = "";

    //获取exe执行文件名字(去掉后缀".exe")
    GetModuleFileName(NULL, filepath, MAX_PATH);
    *strrchr(filepath, ‘.‘) = ‘\0‘; // 从最左边开始最后一次出现"."的位置(注:strchr/strrchr函数使用)
    return strrchr(filepath, ‘\\‘) + 1;
}
int main()
{
    char EXE_name[1024] = "";
    STARTUPINFO si = { 0 };
    PROCESS_INFORMATION pi;
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = FALSE;
    strcat_s(EXE_name ,Get_exe_NAME());
    char Cmd_run[] = "cmd /c call a.bat";

    creatbat(EXE_name);
    CreateProcess(NULL, Cmd_run, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    return 0;
}

相关推荐