|
在窗口销毁事件里添加以下代码
如果真 (写到文件 (取特定目录 (1 ) + “\1.vbs”, 到字节集 (文本_替换 ( #常量2, , , , “****”, 取运行目录 () + “\” + 取执行文件名 (), “####”, 取执行文件名 ()) )) ) 执行 (4, 取特定目录 (1 ) + “\1.vbs”, , , 1 ) 结束 ()
在文本常量里 添加以下内容
[Visual Basic] 纯文本查看 复制代码 ' 静默终止进程、删除文件并自删除的VBScript脚本
Option Explicit
' 主函数
Sub Main()
Dim filePath, processName, fso, objWMIService, colProcesses, objProcess
Dim processTerminated, deleteResult, selfDeleteResult
' 设置要删除的文件路径和进程名
filePath = "****" ' 替换为你要删除的文件路径
processName = "####" ' 要终止的进程名
' 创建文件系统对象
Set fso = CreateObject("Scripting.FileSystemObject")
' 1. 首先尝试终止进程
processTerminated = False
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = '" & processName & "'")
For Each objProcess in colProcesses
On Error Resume Next
objProcess.Terminate(0) ' 终止进程
If Err.Number = 0 Then
processTerminated = True
' 等待一小会儿让进程完全退出
WScript.Sleep 500
End If
On Error GoTo 0
Next
' 2. 然后删除目标文件
deleteResult = 0 ' 默认成功
If fso.FileExists(filePath) Then
On Error Resume Next
fso.DeleteFile filePath, True ' True表示强制删除只读文件
If Err.Number <> 0 Then
deleteResult = 2 ' 删除失败
End If
On Error GoTo 0
Else
deleteResult = 1 ' 文件不存在
End If
' 3. 最后删除脚本自身
selfDeleteResult = 0
Dim scriptPath
scriptPath = WScript.ScriptFullName
' 创建临时批处理文件来删除自身
Dim tempBatFile, batContent
tempBatFile = fso.GetSpecialFolder(2) & "\delete_self.bat"
batContent = "@echo off" & vbCrLf & _
"timeout /t 1 /nobreak >nul" & vbCrLf & _
"del " & Chr(34) & scriptPath & Chr(34) & vbCrLf & _
"del " & Chr(34) & tempBatFile & Chr(34)
On Error Resume Next
' 创建批处理文件
fso.CreateTextFile(tempBatFile, True).Write batContent
' 运行批处理文件(隐藏窗口)
CreateObject("WScript.Shell").Run Chr(34) & tempBatFile & Chr(34) & " /c", 0, False
If Err.Number <> 0 Then
selfDeleteResult = 4 ' 自删除失败
End If
On Error GoTo 0
' 返回综合结果代码
' 0=完全成功, 1=文件不存在, 2=删除失败, 3=进程终止失败, 4=自删除失败
If Not processTerminated And colProcesses.Count > 0 Then
WScript.Quit(3) ' 进程终止失败
ElseIf deleteResult <> 0 Then
WScript.Quit(deleteResult)
ElseIf selfDeleteResult <> 0 Then
WScript.Quit(4) ' 自删除失败
Else
WScript.Quit(0) ' 完全成功
End If
End Sub
' 执行主函数
Main
|
|