给你个思路吧~你知道现在的卸载程序(uninstallexe)是怎么实现自删除的嘛? 大部分都是这样的:1用户运行uninstallexe,检测是否有命令行。若有,跳到第3步。若没有程序把自身Copy到系统临时文件夹2从临时文件夹启动自己,命令行是安装LOG。然后自己退出3(临时文件夹中的卸载程序):按照安装LOG(命令行中所指示的)中记录的安装信息,删除掉~
BOOL SelfDel()
{
SHELLEXECUTEINFO sei;
TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
// 获得自身文件名 获取cmd的全路径文件名
if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))
{
// 设置命令参数
lstrcpy(szParams,"/c del ");
lstrcat(szParams, szModule);
lstrcat(szParams, " > nul");
// 设置结构成员
seicbSize = sizeof(sei);
seihwnd = 0;
seilpVerb = "Open";
seilpFile = szComspec;
seilpParameters = szParams;
seilpDirectory = 0; seinShow = SW_HIDE;
seifMask = SEE_MASK_NOCLOSEPROCESS;
// 创建cmd进程
if(ShellExecuteEx(&sei))
{
// 设置cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出
SetPriorityClass(seihProcess,IDLE_PRIORITY_CLASS);
// 将自身进程的优先级置高
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
// 通知Windows资源浏览器,本程序文件已经被删除
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
return TRUE;
}
}
return FALSE;
}
其他相关程序直接调用remove函数删除就好 只有程序本身 需要新建进程删除 也就是上面这个代码
代码木有
思路一堆
如果您的程序想删除原本的
友情提示看看百度影音的做法吧
直接新建了一个文件夹
删除原本的文件夹
这个是比较极端的
您可以尝试这次的更新程序下载下来2个EXE一个是主程序_TEMPEXE一个是UPDATEEXE
然后执行UPDATEEXE
关闭自己
UpdateEXE
删除原本的内容
更改主程序_TEMPEXE
为主程序exe
这下就把原本的程序完美替换了
/切割/
但是以前见过单文件自己更新自己的,不知道是否是经过打包
但文件自己更新自己是这样子滴动态生成一个BAT然后执行他就好了执行完了BAT自行删除这个就很简易了
但是您要考虑到BAT要是删除失败可就比较恶心了
如果您不关心原本的程序
或不关心原本程序的废除DALL冗余的文件
那么就简单了
但是也有前提:
前提是;你的主程序EXE
也就是你执行更新这一段代码的EXE程序自己不更新否则由于进程锁无法更新
其实也能仿
例如下载的新的EXE名字改一下生成BAT删除原本EXE更改名字BAT自行删除
/再割/
您说的自己更新自己是CLICKONCE吧
他是微软自己实现的通过WINDOWS的一个组件
前提当然也就是您说的打包了
而且整个打包方式都不同
以上就是关于易语言写程序运行后删除自身全部的内容,包括:易语言写程序运行后删除自身、求一段C语言写的程序自毁代码,要求该程序在任务结束后删除自身及相关文件.、c#如何解决更新程序并删除自身。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)