C 自删除技术---批处理方式
#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 ;
}
@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 代表隐藏窗口。
);
SHELLEXECUTEINFO *pExecInfo // 一个指向 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 自删除技术---批处理方式的更多相关文章
- 短视频 SDK 功能点技术实现方式详解
第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...
- 短视频 SDK 6大功能技术实现方式详解
第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...
- FluentData - 轻量级.NET ORM持久化技术解决方式
FluentData - 轻量级.NET ORM持久化技术解决方式 文件夹: 一.什么是ORM? 二.使用ORM的优势 三.使用ORM的缺点 四.NET下的ORM框架有哪些? 五.几 ...
- Windows Server 2012重复数据删除技术体验
在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...
- 这才是正确删除 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 ...
- 复选框批量删除操作-jquery方式
1.首先在页面添加一个批量删除的按钮:<li class="btns"><input id="deleteSubmit" class=&quo ...
- JDBC2.0操作:结果集,更新,插入,删除,批处理语句
JDBC对ResultSet的支持 JDBC最重要的概念是批处理,可以一次完成多个语句的执行. 可滚动的结果集. 如果想创建可滚动的结果集,则在创建PrepareStatement时候必须指定创建的类 ...
- Spring框架中的AOP技术----注解方式
利用AOP技术注解的方式对功能进行增强 CustomerDao接口 package com.alphajuns.demo1; public interface CustomerDao { public ...
- Spring框架中的AOP技术----配置文件方式
1.AOP概述 AOP技术即Aspect Oriented Programming的缩写,译为面向切面编程.AOP是OOP的一种延续,利用AOP技术可以对业务逻辑的各个部分进行隔离,从使得业务逻辑各部 ...
随机推荐
- .Net基础篇_学习笔记_第五天_流程控制while循环
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- <%@ include %>导入的文件乱码
如: <% String ss = (String) session.getAttribute("username"); if (ss == null || ss == &q ...
- Redis压缩包win10快速启动之记录一
转载请标明出处: http://dujinyang.blog.csdn.net/ 本文出自:[奥特曼超人的博客] Redis压缩包 配置环境变量,直接CMD中启动,默认是打开redis.conf,当然 ...
- StringBuilder和StringBuffer的区别
Java中StringBuilder和StringBuffer的区别分析 StringBUilder是线程不安全的(线程同步访问的时候会出问题),但是效率相对较高. (String类型使用加号进行拼接 ...
- Java第三次作业第五题
5. [问题描述]Fibonacci序列处理 从文件in.txt中读取第一个数作为Fibonacci数列的开始数n,读取第二个数,作为需要写入的数的个数m. 将从n开始的m个Fibonacci数列写入 ...
- Vuex,从入门到...
Vuex 是什么? 官方是这么说的:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 不懂? ...
- Scrapy高级用法
日志相关 一.日志相关变量 LOG_LEVEL = '' LOG_FILE = '文件名.log' 二.日志级别 5 CRITICAL :严重错误 4 ERROR :普通错误 3 WARNING :警 ...
- 品Spring:能工巧匠们对注解的“加持”
问题的描述与方案的提出 在Spring从XML转向注解时,为了自身的开发方便,对注解含义进行了扩充(具体参考本号上一篇文章). 这个扩充直接导致了一个问题,就是需要从注解往元注解以及元元注解(即沿着从 ...
- Ubuntu18.04直接安装python3.7或者升级自带的python3.6版本之后导致终端无法打开的解决办法
安装ptyhon3.7 sudo apt-get update sudo apt-get install python3.7 安装成后的目录在/usr/bin/python3.7,同时将其设置成默认 ...