程序自删除的方式有很多,不过最终的思想不过是关闭本身进程,开启新进程用于删除自身。下面这个方法是用windows自带命令行程序实现删除。
命令行为 cmd.exe /c del filename
代码示例:C语言形式
#include
#include
#include
BOOL SelfDel()
{
SHELLEXECUTEINFO sei;
TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
// 获得自身文件名. 获取cmd的全路径文件名
if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))
{
// 设置命令参数.
lstrcpy(szParams,"/c del ");
lstrcat(szParams, szModule);
lstrcat(szParams, " > nul");
// 设置结构成员.
sei.cbSize = sizeof(sei);
sei.hwnd = 0;
sei.lpVerb = "Open";
sei.lpFile = szComspec;
sei.lpParameters = szParams;
sei.lpDirectory = 0; sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
// 创建cmd进程.
if(ShellExecuteEx(&sei))
{
// 设置cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
// 将自身进程的优先级置高
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
// 通知Windows资源浏览器,本程序文件已经被删除.
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
return TRUE;
}
}
return FALSE;
}
另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~
分享(源码、项目实战视频、项目笔记,基础入门教程)
免费学习:
免费学习: