#include<stdio.h>
#include<windows.h>
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址实现隐藏窗口。
int main(void)
{
FILE *fp;
TCHAR buffer[MAX_PATH];
GetModuleFileName(NULL,buffer,MAX_PATH);
fp = fopen("del.bat","w");
fprintf(fp,"@echo off\r\n");
fprintf(fp,":start\r\n\tif not exist %s goto done\r\n",buffer);
fprintf(fp,"\tdel /f /q %s\r\n",buffer);
fprintf(fp,"goto start\r\n");
fprintf(fp,":done\r\n");
fprintf(fp,"\tdel /f /q %%0"); // 两个%%显示一个%,%0 代表自身。
fclose(fp);
ShellExecuteA(NULL,"open","del.bat",NULL,NULL,SW_HIDE);
return ;
}
bat 文件如下:

@echo off
:start
if not exist del.exe goto done
del /f /q del.exe
goto start
:done
del /f /q %0

GetModuleFileName() 介绍:

功能:获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。

函数原型:DWORD WINAPI GetModuleFileName( HMODULE  hModule, LPTSTR  lpFilename, DWORD  nSize) ;

参数:hModule 表示正在被加载模块的句柄,如果为 NULL,则将当前可执行文件的完整路径复制到 lpFilename 中

nSize 表示复制到 lpFilename 的最大字符数量。

返回值:如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。

ShellExecute() 介绍:

功能:运行一个外部程序 (或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。

函数原型:HINSTANCE ShellExecute(
  HWND   hwnd,               // 指定父窗口句柄。
  LPCSTR lpOperation,    // 指定动作, 譬如: open、runas、print、edit、explore、find   (提示,可以打开网址
  LPCSTR lpFile,              // 指定要打开的文件或程序
  LPCSTR lpParameters,  // 给要打开的程序指定参数; 如果打开的是文件这里应该是 nil
  LPCSTR lpDirectory,       // 缺省目录
  INT    nShowCmd           // 打开选项  ---  SB_HIDE 代表隐藏窗口。
);

返回值:执行成功会返回应用程序句柄。
              返回的HINSTANCE可以将它转换为一个整数(%d),并比较它的值大于还是小于32或比较它的错误代码
              返回值大于32表示执行成功,返回值小于32表示执行错误。
 
ShellExecuteEX() 介绍:
功能:ShellExecute() 的扩展,对指定的文件进行操作。
函数原型:BOOL ShellExecuteEx(
                  SHELLEXECUTEINFO *pExecInfo  // 一个指向 SHELLEXECUTEINFO 结构的指针。
                  );
返回值:返回 TRUE 表示成功,FALSE 表示失败。
 
SHELLEXECUTEINFO 结构体:
typedef struct _SHELLEXECUTEINFO {
DWORD cbSize; // 该结构体大小。
ULONG fMask; // 指示其他结构成员的内容和有效性的标志,默认为 0。
HWND hwnd; // 父窗口句柄(用于显示执行该函数时可能出现的任何消息框),可以为 NULL。
LPCSTR lpVerb; // 指定要执行的操作,可以为 NULL。同上 lpOperation,runas 代表以管理员身份运行。
LPCSTR lpFile; // 指定将执行由 lpVerb 参数指定的操作的文件或对象的名称。
LPCSTR lpParameters; // 执行参数,可以为 NULL。
LPCSTR lpDirectory; // 工作目录,可以为 NULL。
int nShow; // 窗体显示方式。
HINSTANCE hInstApp; // 出参,用于了解该函数是否调用成功,可以为 NULL。
void *lpIDList; // ITEMIDLIST结构的地址,存储成员的特别标识符。
LPCSTR lpClass; // 指明文件类别的名字或 GUID,可以为 NULL。
HKEY hkeyClass; // 文件类型的注册表项的句柄,可以为 NULL。
DWORD dwHotKey; // 与应用程序关联的键盘快捷键,可以为 NULL。
union {
HANDLE hIcon; // 取得对应文件类型的图标的Handle,可以为 NULL。
HANDLE hMonitor; // 将文档显示在显示器上的Handle,可以为 NULL。
} DUMMYUNIONNAME;
HANDLE hProcess; // 指向新启动的程序的句柄,可以为 NULL。
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

C 自删除技术---批处理方式的更多相关文章

  1. 短视频 SDK 功能点技术实现方式详解

    第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...

  2. 短视频 SDK 6大功能技术实现方式详解

    第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...

  3. FluentData - 轻量级.NET ORM持久化技术解决方式

    FluentData - 轻量级.NET ORM持久化技术解决方式   文件夹:    一.什么是ORM?  二.使用ORM的优势  三.使用ORM的缺点  四.NET下的ORM框架有哪些?  五.几 ...

  4. Windows Server 2012重复数据删除技术体验

    在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...

  5. 这才是正确删除 office 的方式

    https://support.office.com/zh-cn/article/%E9%80%9A%E8%BF%87%E5%9C%A8%E9%87%8D%E6%96%B0%E5%AE%89%E8%A ...

  6. 复选框批量删除操作-jquery方式

    1.首先在页面添加一个批量删除的按钮:<li class="btns"><input id="deleteSubmit" class=&quo ...

  7. JDBC2.0操作:结果集,更新,插入,删除,批处理语句

    JDBC对ResultSet的支持 JDBC最重要的概念是批处理,可以一次完成多个语句的执行. 可滚动的结果集. 如果想创建可滚动的结果集,则在创建PrepareStatement时候必须指定创建的类 ...

  8. Spring框架中的AOP技术----注解方式

    利用AOP技术注解的方式对功能进行增强 CustomerDao接口 package com.alphajuns.demo1; public interface CustomerDao { public ...

  9. Spring框架中的AOP技术----配置文件方式

    1.AOP概述 AOP技术即Aspect Oriented Programming的缩写,译为面向切面编程.AOP是OOP的一种延续,利用AOP技术可以对业务逻辑的各个部分进行隔离,从使得业务逻辑各部 ...

随机推荐

  1. 6.final和static

    一.final final修饰类表示该类为最终类,不可被继承. final修饰方法表示该方法为最终方法,不可被重写. final修饰属性表示该属性不可变,不可变有两种含义.当其修饰基本类型变量时表明其 ...

  2. Apache RocketMQ 消息队列部署与可视化界面安装

    一.介绍 Apache RocketMQ是一个分布式.队列模型的消息中间件,具有低延迟.高性能和高可靠.万亿级容量和灵活的可扩展性.核心组件由四部分组成:Name Servers,Brokers,Pr ...

  3. 数据库高级:SQL-CREATE-DATABASE语句

    CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库. SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL ...

  4. 基于GitHub Issues的评论系统--gitment

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/201909/ ...

  5. [C++]类的设计(2)——拷贝控制(拷贝控制和资源管理)

      1.类的行为分类:看起来像一个值:看起来想一个指针.     1)类的行为像一个值,意味着他应该有自己的状态.当我们拷贝一个像值的对象时,副本和原对象是完全独立的.改变副本不会对原有对象有任何影响 ...

  6. FPGA、GPU、CPU三者各自的优缺点是什么呢?

    CPU: 英文全称:Central Processing Unit. 中文全称:中央处理器. 厂商:英特尔Intel. 功能:是一台计算机的运算核心和控制核心. 缺点:运算能力(最弱),核处理数(最少 ...

  7. java Mail如何发送邮件

    1.应用场景:在系统需要发送与用户相关的消息时,而用户不在线,可以采取发送邮件的方式,使用户了解最新的系统情况 或者发送验证码等验证场景 2.实验环境 主要使用mail.jar和activation. ...

  8. Build a Contest-创建比赛 CodeForce1100B

    题目链接:Build a Contest 题目原文 Arkady coordinates rounds on some not really famous competitive programmin ...

  9. Splitting into digits CodeForce#1104A

    题目链接:Splitting into digits 题目原文 Vasya has his favourite number 

  10. 项目管理知识点-结合Enovia项目管理模块

    核心知识域:整体管理.范围管理.进度管理.成本管理.质量管理.信息安全管理 保障域:人力资源管理.合同管理.采购管理.风险管理.信息(文档)管理.配置管理.知识产权管理.法律法规标准规范管理.职业道德 ...