博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC程序自删除
阅读量:7260 次
发布时间:2019-06-29

本文共 1989 字,大约阅读时间需要 6 分钟。

  程序自己删除自己的方法,基本都是借助第三方删除。要不然只有把自己添加到重启后删除,或者在退出之前将自己移动到垃圾箱去(使用MoveFileEx,特别注意第三个参数)。

  下面介绍借助第三方删除自己,代码如下:
  

View Code
void DeleteSelfByCmd() {
char szCommandLine[MAX_PATH] = {
0}; sprintf(szCommandLine, "/c ping 127.0.0.1 -n 1 && del /f/q \"%s\"", _pgmptr); // 将自己设置为快速退出 SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); ShellExecute(NULL, "open", "cmd.exe", szCommandLine, NULL, SW_HIDE); ExitProcess(0); } void DeleteSelfByFile() {
// 以批处理bat文件为例 const char szFileName[] = "DeleteBat.bat"; char szDeleteBatText[MAX_PATH]; ZeroMemory(szDeleteBatText, MAX_PATH); wsprintfA(szDeleteBatText, "ping 127.0.0.1 -n 1\r\ndel /q \"%s\"\r\ndel %%0", _pgmptr); HANDLE hDelBatFile = CreateFileA(szFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == hDelBatFile) {
CloseHandle(hDelBatFile); hDelBatFile = NULL; return; } DWORD dwWrite(0); if (0 == WriteFile(hDelBatFile, szDeleteBatText, strlen(szDeleteBatText), &dwWrite, NULL)) {
CloseHandle(hDelBatFile); hDelBatFile = NULL; return; } CloseHandle(hDelBatFile); hDelBatFile = NULL; // 将自己设置为快速退出 SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); ShellExecute(NULL, "open", "DeleteBat.bat", _pgmptr, NULL, SW_HIDE); ExitProcess(0); }

  其中为了确保第三方能删除自己,最好将自己设置为快速退出(),另外也可以在第三方中加入延时。

  另外,也可以通过vbs脚本删除自己,思路和通过bat文件删除自己一致,vbs文件内容如下:
 

View Code
Set ObjFSO = CreateObject("Scripting.FileSystemObject") If IsExitAFile("D:\\test.tst")    // 判断文件是否存在 Then DeleteAFile("D:\\test.tst") ObjFSO.DeleteFile Wscript.ScriptFullName    // 删除自己,Wscript.ScriptFullName返回脚本的实际路径

需头文件#include <shellapi.h>

【参考资料 感谢作者】
。。。当时忘了记录 

 

 

转载于:https://www.cnblogs.com/ziwuge/archive/2011/11/17/2253042.html

你可能感兴趣的文章
Computed property "XXX" was assigned to but it has no setter
查看>>
敏捷开发: 超级易用水桶估计系统
查看>>
Dojo 如何测试 widget
查看>>
SAP 前端技术的演化史简介
查看>>
聊聊flink的MemoryPool
查看>>
前嗅ForeSpider数据采集中采集列表界面介绍
查看>>
228. Summary Ranges
查看>>
原型链
查看>>
Nervos 双周报第 3 期:佛系新年之后的开工大吉!
查看>>
学习webpack4 - 抽离公共代码
查看>>
不同浏览器下 autoplay 的限制策略和方案的整理
查看>>
聊聊flink的ConnectionManager
查看>>
node.js初体验之利用node.js的fs-文件系统,来写一个批量修改文件名的小工具
查看>>
Promise面试题2实现异步串行执行
查看>>
Python使用xslt提取网页数据
查看>>
git常用命令速查表
查看>>
神经网络基础
查看>>
Linux常用命令
查看>>
k8s与aws--如何在cloud-provider=aws的k8s中设置externalTrafficPolicy为local
查看>>
koa2系列教程:综合koa2搭建登录注册页面
查看>>