VC 如何使程序运行后自己删除自己

实现执行中的exe文件自己删除自己 实现正在执行的程序自删除,在vc++ 6.0实现,使用的c语言 立即下载

VC 如何使程序运行后自己删除自己

有时候,我们需要创建一个运行后能够自己删除自己的可执行程序即自删除程序。很明显如果一个进程通过直接调用DeleteFile()来删除自己是不可能的。必须另想办法,经过本人在网上参考很多资料后实际测试并集众家之所长,发现有二种方法效果比较好。现在将其封装成函数,这样使用将更加容易:

 

方法1,调用BAT文件。

//向指定文件写入文本。如果文件不存在就创建。

int WriteTextToFile(const char szFileName[], const char *lpszText)

{

       FILE *pfile = fopen(szFileName, "w+");

       if (pfile == NULL)

              return -1;

       int nWriteByte = fprintf(pfile, lpszText);

       fclose(pfile);

       return nWriteByte;

}

void DeleteApplicationSelf() 

{

       const char szFileName[] = "DeleteBat.bat"; //使用批处理

       const char szDeleteBatText[] = "@ echo off\r\ndel %%1\r\ndel %%0";

 

       //创建BAT文件并写入内容

       WriteTextToFile(szFileName, szDeleteBatText);

 

       //设置本程序进程基本为实时执行,快速退出。

       SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

       SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

       //通知资源管理器不显示本程序,当然如果程序没有真正的删除,刷新资源管理器后仍会显示出来的。

    SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, _pgmptr, NULL);

      

       //运行bat文件来删除程序

       ShellExecute(NULL, "open", "DeleteBat.bat", _pgmptr, NULL, SW_HIDE);

 

       ExitProcess(0);

}

调用起来非常方便:直接一个DeleteApplicationSelf()就完成了任务。

 

方法二。调用系统的cmd程序并传入参数。

void DeleteApplicationSelf()

{

       char szCommandLine[MAX_PATH + 10];

 

       //设置本进程为实时执行,快速退出。

       SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

       SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

       //通知资源管理器不显示本程序,当然如果程序没有真正的删除,刷新资源管理器后仍会显示出来的。

    SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, _pgmptr, NULL);

      

       //调用cmd传入参数以删除自己

       sprintf(szCommandLine, "/c del /q %s", _pgmptr);

       ShellExecute(NULL, "open", "cmd.exe", szCommandLine, NULL, SW_HIDE);

 

       ExitProcess(0);

}

调用方法与前面相同。

 

这二种方法都不会出现DOS程序窗口,完全达到了无影无踪的删除效果,更加不会出现有的程序自删除后仍显示程序图标,要刷新资源管理器后才发现程序被删除了。

 

再对代码作下讲解:

1._pgmptr 的定义为extern char * _pgmptr,stdlib.h文件对其说明为:points to the module (EXE)name。使用_pgmptr与使用GetModuleFileName(NULL, szExePath, MAX_PATH);来得到程序的路径是等效的。

2.ShellExecute()最后一个参数为SW_HIDE表示隐藏窗口。

3.DOS命令del的/q参数表示安静模式,这样删除文件时就不会出现要求用户确认的提示对话框了。

 

附:二种方法都要加入头文件及lib库

#include <windows.h>

#include <stdlib.h>

#include <shellapi.h>

#include <shlobj.h>

 

#pragma comment(lib, "shell32.lib")

转载请标明出处,原文地址:http://www.cnblogs.com/morewindows/archive/2011/08/12/2136342.html

c++ 文件自删除 程序自删除 文件自删除一般用于卸载程序 实现:设置本进程为实时执行,快速退出。调用cmd传入参数以删除自己。 立即下载

相关推荐

c++实现自我删除

c++实现自我删除

小实验:JAVA怎么让程序执行时把自己给销毁?

一个简单的想法:能不能让程序只执行一次,执行完把自己给销毁掉,不让别人看到自己的源代码? 情况限定在可执行jar包,java -jar destory.jar, destory.jar在主要功能执行完后,销毁destory.jar中内容。 大概思想上,程序执行中找到自身jar包位置,并对jar包内容进行输入。本以为在原jar包内容进行修改的过程中会有异常,但最终在linux和windows上测...

qq_36101933的博客 2049

HTB Attacking GraphQL Skills Assessment

通过枚举应用,利用GraphQL API,发现sql注入点,然后利用找到flag。

qq_33522010的博客 453

介绍一种巧妙的删除程序自己的方法

  介绍一种巧妙的删除程序自己的方法vcbear 近日看到网友询问如何实现程序运行之后把自己删除的方法,不知大家对木马甚么的兴趣实在太浓,还是想要这样的效果:用户只要一运行程序,可执行文件就没有了,可是程序还是在跑,胆小的只怕要喊"鬼呀!","老婆,快出来看上帝"甚么的。其实最典型的用法是写反安装程序. 闲来无事,Bear掰到一种还算巧妙的“删除自己”的方法

vcbear的专栏 1680

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 974

ROS2节点通信实战:用C++手写一个‘智能小车’控制模型(附完整代码)

本文详细介绍了如何使用ROS2和C++构建一个智能小车控制模型,涵盖运动控制节点、电池管理服务、参数动态配置和Rviz可视化等核心功能。通过实战项目演示ROS2节点通信机制,帮助开发者快速掌握机器人开发的关键技术,并提供了完整的代码实现和系统集成方案。

weixin_30607029的博客 261

如何简单实现可执行文件的自我删除

       可执行文件即 EXE 文件在运行过程中,由系统管理其打开的句柄。此时对该文件的一些操作是被系统禁止的,比如删除操作。然而在某些场合,可能须要程序有自我删除的功能,也就是程序运行结束后删除自身。基于这个想法,可以有一种很简单的方法来实现这个基本功能。        本方法基于两点来实现删除功能。一是利用 windows 的 command program 的删除文件操作;再者就是启

Kern 820

国际项目投标那些事(三)海外项目招标文件的组成

以一个实际的项目作为例子,是我2020年初投的一个东南亚国家的水厂的竞争性投标。这个投标的招标基于FIDIC yellow book (Design and Build) 合同模板。 海外项目的招标一般是有专门的咨询公司(consulting engineer)写招标文件,有的咨询公司非常专业,对于技术、合同、业绩的要求非常细致。 我这个项目的招标文件共5册 400多页(全英文),附件26册将...

WTSolutions的博客 2004

C语言几种获取自身路径的方法

很多程序都需获取自己的路径,这里提供了几种方法。 1._pgmptr 这个东西源自stdlib.h,是个字符串,可以直接调用. #include <stdio.h> #include <stdlib.h> int main() { printf("%s\n",_pgmptr); system("pause"); return 0; } 输出exe绝对路径. 2....

cjz2005的博客 1万+

蠕虫病毒代码(纯属参考,请勿用于非法事件)

1.介绍蠕虫病毒 蠕虫病毒是一种常见的计算机病毒,是无须计算机使用者干预即可运行的独立程序,它通过不停的获得网络中存在漏洞的计算机上的部分或全部控制权来进行传播。 计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据和恶意篡改系统. 影响计算机使用并且能够自我复制的一组计算机指令或者程序代码 中文名:蠕虫病毒 传染方式:网络和电子邮件 外文名:Worm virus 类型:计算机病毒 2.代码(建议使用虚拟机,否则你的计算机将会就地报废,使用时要关闭电脑病毒保护,否则程序会...

Kenny20211105的博客 2万+

中兴B860AV2.1-A刷机避坑指南:晶晨免拆神器+安卓7.1.2固件实测

本文提供中兴B860AV2.1-A机顶盒的详细刷机教程,重点介绍使用晶晨免拆神器配合安卓7.1.2线刷固件包的实操步骤。内容涵盖刷机前的硬件确认、工具准备、软件设置、烧录全过程监控及常见问题解决,旨在帮助用户安全、高效地完成刷机,规避变砖风险,释放设备潜力。

pytorch8learner的博客 746

VC 程序运行后自己删除自己

有时候,我们需要创建一个运行后能够自己删除自己的可执行程序即自删除程序。很明显如果一个进程通过直接调用DeleteFile()来删除自己是不可能的。必须另想办法,经过本人在网上参考很多资料后实际测试并集众家之所长,发现有二种方法效果比较好。现在将其封装成函数,这样使用将更加容易:   方法1,调用BAT文件。 //向指定文件写入文本。如果文件不存在就创建。 int WriteTextToF

geagerg的博客 701

74hc595驱动模块的Verilog设计(线性状态机)

module hc595_driver( input clk, //50Mhz input rst_n, //复位信号 input [15:0] data, //数码管待显示数据,8位段选数据,8位位选数据 input en, //使能 o...

qq_41294540的博客 3742
上一篇: C,C++宏中#和##
CHF_VIP
博客等级 码龄14年 2粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值