76 lines
1.8 KiB
C++
76 lines
1.8 KiB
C++
// SelfDel.cpp : 定义控制台应用程序的入口点。
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include <Windows.h>
|
||
|
||
|
||
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;
|
||
}
|
||
|