2018年11月27日 星期二

檢查process並執行程式 (windows排程)

在windows環境下,有時候我們會希望使用排程定時檢查某些程式是否在運作,如果沒有運作,則執行啟動。
以下以Notepad++為例,示範如何檢查是否運作,使用排程自動執行。



1. 製作 checknpd.bat 檢查並執行Notepad++:
先確認 Notepad++的執行路徑 及 執行檔:
D:\Program Files\Notepad++
Notepad++.exe
仿造填入checknpd.bat中
@echo off
tasklist /FI "IMAGENAME eq Notepad++.exe" 2>NUL | find /I /N "Notepad++.exe" >NUL
if "%ERRORLEVEL%"=="0" (
exit 
) else (
PUSHD
cd /d "D:\Program Files\Notepad++"
start Notepad++.exe
POPD
)

完成後,嘗試直接執行 checknpd.bat,確認是否成功。

2. 配置到windows排程中:
在windows的啟動列搜尋"工作排程器",出現如下的畫面:
可先於左邊的 "工作排程器程式庫" 增加自己使用的類別,避免與其他的排程混合在一起,不容易管理。之後點選右邊 "建立工作...",建立新的排程。

需要填寫的是 "一般"、"觸發程序"、動作 三個分頁。
"一般"頁面填寫的資訊是提供識別,就依照個人喜好填寫。
"觸發程序"頁面,點選左下角"新增"按鈕後,如上圖所示。選擇僅一次,然後下方勾選"重複工作每隔",填入想要檢查的時間間隔(可以用鍵盤修改內容),並調整右邊的"持續時間為"不限制。確認後編輯動作頁面。

"動作"頁面,點選左下角"新增"按鈕後,如上圖所示。
在"程式或指令碼"填入(或用右邊的瀏覽選擇)剛剛寫好的checknpd.bat,按下確定後,便完成自動排程。

之後時間到就會自動執行checknpd.bat,如果notepad++.exe沒有執行,就會自動執行。

3. 解決每次排程執行時,windows命令視窗閃現又消失的問題:
當每次排程執行時,windows執行batch會產生命令視窗,執行完畢就消失,讓人覺得很不舒服,要解決此問題,可以從網路上尋找invis.vbs或直接編輯invis.vbs檔案(可與checknpd.bat放置同一目錄下),內文如下:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False

完成後,調整排程的"動作"命令如下:
"程式或指令碼"改為 wscript ,下方的新增引數填入,invis.vbs 與 checknpd.bat,如下:
D:\Temp\invis.vbs D:\Temp\checknpd.bat
如此排程執行時,就不會再有命令視窗閃爍的問題。


沒有留言:

張貼留言