VC++ 程序删除自身(卸载)

早些年自己写了一个程序打包的安装程序,里面具备了卸载功能。前几天有群友问到了这个问题,程序怎么在退出的时候删除自身?也有人问A进程怎么去关闭B进程?其实实现思路都一样,都是可以通过借刀杀人(程序自身是无法删除自身的,所以要想删除自身都是通过另外一个程序)来完成。以下是非Unicode下实现代码(Unicode请自行修改):

void UnintallSelfApplication()
{
	// 设置进程优先级-实时,使其抢先于操作系统组件之前运行
	SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
	// 设置线程优先级-实时
	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
	// 获取当前工作进程(exe)的完整路径,也可以通过GetModuleFileName函数来完成
	char* lpszFilePath = NULL;
	_get_pgmptr(&lpszFilePath);
	// 通知资源管理器,删除工作进程文件
	SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, lpszFilePath, NULL);
	char szCommandLine[MAX_PATH + 10];
	sprintf_s(szCommandLine, "/c del /q %s", lpszFilePath);
	// 隐藏启动控制台程序,执行删除文件指令
	ShellExecute(NULL, "open", "cmd.exe", szCommandLine, NULL, SW_HIDE);
	// 退出当前进程
	ExitProcess(ERROR_SUCCESS);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值