使用 VBS 自动杀死 PicGo 进程的解决方案
背景
在日常文档管理中,我采用了 Typora + PicGo + MinIO 的组合来高效管理图片与文档:
- Typora 是一款简洁的 Markdown 编辑器,支持实时预览。
- PicGo 用于自动将图片上传到 MinIO,并将生成的链接转换为 Markdown 格式,方便直接粘贴到 Typora 中。
- MinIO 是一个高性能的对象存储服务,用来存储上传的图片。
通过这个组合,我能够轻松地管理文档与图片。然而,PicGo 存在一个问题:运行一段时间后会出现卡死现象,导致图片无法正常上传。这迫使我频繁手动杀掉 PicGo 的进程并重新启动,极大影响了工作效率。
为了解决这个问题,我编写了一个 VBS 脚本,实现了 自动杀死 PicGo 进程 的功能,确保图片上传的顺畅。
脚本实现
以下是脚本的核心功能:
- 每隔 10 分钟检查一次是否存在 PicGo 进程,若存在则杀掉它。
- 若未找到 PicGo 进程,等待 30 分钟后再次检查。
- 将脚本的运行情况记录到
result.log文件中。
脚本代码
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Dim enableLogging
enableLogging = True ' 设置为 False 可关闭日志输出
Do While True
Dim colProcesses, objProcess, processFound
processFound = False
' 查找名为 PicGo 的进程
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = 'PicGo.exe'")
For Each objProcess in colProcesses
processFound = True
' 终止进程
objProcess.Terminate
If enableLogging Then WriteLog "Process terminated: PicGo.exe"
Next
If Not processFound Then
If enableLogging Then WriteLog "Process not found: PicGo.exe,waiting for 15 minutes"
' 等待 30 分钟 (1800000 毫秒)
WScript.Sleep 1800000
Else
' 等待 10 分钟 (600000 毫秒)
WScript.Sleep 600000
End If
Loop
Sub WriteLog(message)
Dim fso, logFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set logFile = fso.OpenTextFile("D:\\result.log", 8, True)
logFile.WriteLine Now & " - " & message
logFile.Close
End Sub
如何使用脚本
1. 保存脚本
将上述代码保存为一个 .vbs 文件(例如 KillPicgo.vbs)。
2. 设置开机自启
为了让脚本在开机时自动运行,可以选择以下方法:
方法 1:将脚本放入启动文件夹
- 按
Win + R,输入shell:startup,然后按回车打开启动文件夹。 - 将
KillPicgo.vbs文件复制到该文件夹中。
方法 2:使用任务计划程序
- 打开“任务计划程序”,点击右侧的“创建任务” 。
- 配置任务名称(例如
KillPicgoTask),并勾选“使用最高权限运行”。 - 在“触发器”选项卡中设置为“在登录时”触发。
- 在“操作”选项卡中,选择“启动程序”,并填写:
- 程序或脚本:
wscript.exe - 添加参数:
C:\路径\到\KillPicgo.vbs
- 程序或脚本:
- 保存任务。
日志功能
脚本会将运行情况记录到 result.log 文件中,包括:
- 成功终止 PicGo 进程的记录。
- 未找到 PicGo 进程时的提示。
如果脚本稳定运行,可以通过设置 enableLogging = False 来关闭日志功能。
总结
通过该脚本,我成功解决了 PicGo 卡死问题,大大提升了图片上传的效率。这一自动化解决方案简单高效,不仅适用于 PicGo,还可以扩展到其他需要定时检测并处理的场景。如果你也遇到了类似问题,不妨试试这个方法!