DeleteSelf/SelfDel.cpp

76 lines
1.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;
}