程序删除自身的四种方法!
本期视频(BV16G411s7sN)的发布离不开@想名麻烦 网友的请求,在使用程序的更新功能会看到很多删除自身和目录下文件的操作,在删除自身时,常常会因为被自身进程占用而无法删除;
具体的删除方法中也是需要销毁掉我们的进程,就和很多安全软件的文件解锁一样,会将占用文件的进程直接结束掉,我们在这里可以看到UP主为大家总结的在EPL编程当中四种程序删除自身的方法。
一. 通过CMD删除自身

.版本 2
.子程序 目录_删除自身_cmd, , 公开, 利用CMD命令删除自身
置文件属性 (取运行目录 () + “\” + 取执行文件名 (), 0)
运行 (“cmd.exe /c del ” + #引号 + 取运行目录 () + “\” + 取执行文件名 () + #引号, 假, #隐藏窗口)
结束 ()
二. 通过VBS删除自身

VBS代码:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Wscript.Sleep(1000)
fso.DeleteFile("
fso.DeleteFile("
源代码:
.版本 2
路径 = 取运行目录 () + “\”
后缀 = #引号 + “)”
写到文件 (路径 + “tem.vbs”, 到字节集 (#自我删除1 + 路径 + 取执行文件名 () + 后缀 + #换行符 + #自我删除0 + 路径 + “tem.vbs” + 后缀))
置文件属性 (路径 + “tem.vbs”, 2)
文件_执行 (路径 + “tem.vbs”)
结束 ()
三. 通过Shell删除自身

.版本 2
nSize = #MAX_PATH × 2
szFileName = 取空白字节集 (nSize)
szComspec = 取空白字节集 (nSize)
GetModuleFileNameW (0, szFileName, #MAX_PATH)
len = GetShortPathNameW (szFileName, szFileName, #MAX_PATH)
.如果真 (len ≠ 0 且 GetEnvironmentVariableW (编码_Ansi到Unicode (“COMSPEC”, ), szComspec, #MAX_PATH) ≠ 0)
' /c del xxx > nul
szBat = { 47, 0, 99, 0, 32, 0, 100, 0, 101, 0, 108, 0, 32, 0 } + 取字节集左边 (szFileName, len × 2) + { 32, 0, 62, 0, 32, 0, 110, 0, 117, 0, 108, 0, 0, 0 }
stShellDel.cbSize = 60 ' sizeof(SHELLEXECUTEINFO)
' 命令窗口进程句柄,ShellExecuteEx函数执行时设置
stShellDel.hwnd = 0
stShellDel.lpVerb = 编码_Ansi到Unicode (“Open”, )
stShellDel.lpFile = szComspec
stShellDel.lpParameters = szBat
stShellDel.lpDirectory = { }
stShellDel.nShow = #SW_HIDE
' 设置为SellExecuteEx函数结束后进程退出
stShellDel.fMask = #SEE_MASK_NOCLOSEPROCESS
' 创建执行命令窗口进程
.如果真 (ShellExecuteExW (stShellDel))
' 设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出
SetPriorityClass (stShellDel.hProcess, #IDLE_PRIORITY_CLASS)
' 设置本程序进程的执行级别为实时执行,这保证本程序能立即获取CPU执行权,快速退出
SetPriorityClass (GetCurrentProcess (), #REALTIME_PRIORITY_CLASS)
SetThreadPriority (GetCurrentThread (), #THREAD_PRIORITY_TIME_CRITICAL)
' 通知Windows资源管理器,本程序文件已经被删除
SHChangeNotify (#SHCNE_DELETE, #SHCNF_PATH, 取指针字节集_ (szFileName), 0)
ExitProcess (0)
四. 通过EXE删除自身

.版本 2
.支持库 spec
取命令行 (命令行)
.如果真 (取数组成员数 (命令行) < 1)
返回 (0)
.如果真结束
信息框 (命令行 [1], 0, , )
id = 进程_名取ID (文件_取文件名 (命令行 [1], 真), 真)
进程_结束 (id)
延迟 (600)
信息框 (写到文件 (取运行目录 () + “\删除自身.exe”, 读入文件 (取运行目录 () + “\删除自身替换.exe”)), 0, , )
注:前三种来自精易模块当中,此模块属于开源,可自行查看源码,最后一种为UP主自写,其中信息框用作调试提示,可根据需求删除。
相关资源下载:https://www.aliyundrive.com/s/8ng67RYBmk5