欢迎光临散文网 会员登陆 & 注册

程序删除自身的四种方法!

2022-06-29 15:53 作者:雾削木FHZ  | 我要投稿

 观看视频

    本期视频(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


程序删除自身的四种方法!的评论 (共 条)

分享到微博请遵守国家法律