// SelfDel.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { printf("任意按键,程序自删除!!!\n"); system("pause"); char szFileName[MAX_PATH] = {0}; char szCmdFileName[MAX_PATH] = {0}; char szCmd[MAX_PATH] = {0}; char szBat[MAX_PATH] = {0}; int iTime = 5; /* 批处理自删除文件 1. 延时5秒 2. 删除指定文件 3. 删除批处理自身 @echo off choice /t 5 /d y /n >nul del C:\Users\DemonGan\Desktop\SelfDel\Debug\SelfDel.exe del %0 */ // 构造批处理文件路径 ::GetModuleFileName(NULL, szFileName, MAX_PATH); ::lstrcpy(szCmdFileName, szFileName); char *p = ::strrchr(szCmdFileName, '\\'); p[0] = '\0'; ::lstrcat(szCmdFileName, "\\selfdel.bat"); // 构造批处理内容 ::wsprintf(szBat, "@echo off\nchoice /t %d /d y /n >nul\ndel %s\ndel %%0\n", iTime, szFileName); // 生成批处理文件 FILE *fp = NULL; fopen_s(&fp, szCmdFileName, "w+"); if (NULL == fp) { return 1; } fwrite(szBat, (1 + ::lstrlen(szBat)), 1, fp); fclose(fp); // 构造命令行 ::wsprintf(szCmd, "cmd.exe /c call %s", szCmdFileName); // 创建新的进程,以隐藏控制台的方式执行cmd命令行 STARTUPINFO si = { 0 }; PROCESS_INFORMATION pi; si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW;//指定wShowWindow成员有效 si.wShowWindow = FALSE;//此成员设为TRUE的话则显示新建进程的主窗口 BOOL bRet = CreateProcess( NULL,//不在此指定可执行文件的文件名 szCmd,//命令行参数 NULL,//默认进程安全性 NULL,//默认进程安全性 FALSE,//指定当前进程内句柄不可以被子进程继承 CREATE_NEW_CONSOLE,//为新进程创建一个新的控制台窗口 NULL,//使用本进程的环境变量 NULL,//使用本进程的驱动器和目录 &si, &pi); if (bRet) { //不使用的句柄最好关掉 CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } return 0; }