Jacob 可以用来做很多事,我这里主要用到了通过 office 转 pdf 的功能。
在使用过程中,偶尔会出现(1%的概率)进程异常,出现弹框等问题导致程序假死。
为了解决类似问题,在使用过程中,可以从以下细节进行优化。
1. 只读模式
使用 office 时,如果文件被占用,在打开始会弹框进行提示:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcBnYldHL0FWby9mZvwVPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMz8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcugzN4UzN5YWN1UmZyYmZyYzX5IDOzQTM5EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
出现该弹窗后会导致程序卡住不动。
如果改为只读模式,就不存在这个问题,代码如下:
注意上面第二行第一个参数,设置为
true
就能解决。
2. 超时重试
如果在转 PDF 过程中,出现下面的错误:
就会导致转换失败,而且不点击【关闭程序】的情况下该进程会卡住。
增加超时重试机制后,虽然该错误窗口还在,但是转PDF可以成功继续。
3. 定时清理错误进程
上面错误中,对应的错误进程为
WerFault.exe
,可以通过在定时任务中执行下面代码关闭该窗口:
Runtime.getRuntime().exec("taskkill /F /IM WerFault.exe");
在出错的的情况,假设是 word 转 pdf,此时在进程列表中,还会一直有对应的
WINWORD.EXE
一直在运行,通过监控进程 PID 存在时长来判断是否因为异常已经很久没有关闭,通过代码来关闭相应的进程。
通过下面代码获取进程列表:
taskkill /nh /FI "IMAGENAME eq XX.EXE"
代码如下:
获取 ID 后,记录进程 ID 被搜索到几次:
当超过一定次数的时候关闭进程:
批量关闭进程: