Jacob 可以用來做很多事,我這裏主要用到了通過 office 轉 pdf 的功能。
在使用過程中,偶爾會出現(1%的概率)進程異常,出現彈框等問題導致程序假死。
爲了解決類似問題,在使用過程中,可以從以下細節進行優化。
1. 只讀模式
使用 office 時,如果文件被佔用,在打開始會彈框進行提示:
出現該彈窗後會導致程序卡住不動。
如果改爲只讀模式,就不存在這個問題,代碼如下:
注意上面第二行第一個參數,設置爲 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 被搜索到幾次:
當超過一定次數的時候關閉進程:
批量關閉進程:
通過以上細節的處理,基本上可以讓 Jacob 的操作不出問題,後臺可以長期平穩運行下去。