2011-02-12 11:55 by 田志良, 4523 visits, 收藏, 編輯
2. 安裝注意事項
3. 需求分析
使用者指定要守護的應用程式(數量不限),該應用程式不僅包括exe可執行檔案,還包括諸如jpg、txt等所有能雙擊開啟執行的應用程式。使用者設定好要守護的應用程式後,關閉應用程式(包括合法和非法關閉),該應用程式要能立即重啟開啟。當電腦重啟時,要守護的應用程式也能自動全部開啟。
4. 詳細設計
要實現上述需求,首先要提供乙個配置檔,讓使用者能隨意配置要守護的應用程式。那麼,該配置檔要配置應用程式的什麼資訊呢?答案:應用程式的全路徑。
好,我們已經知道了要守護的應用程式的全路徑,接下來怎樣完成守護任務呢?首先,我們應該開啟任務管理器,檢視一下正在執行的有哪些程序,然後逐一讀取出這些程序的全路徑,與要守護的應用程式的全路徑比對,如果一致,說明要守護的應用程式已開啟了,此時要分配一條執行緒監控該程序控制代碼,當該程序控制代碼返回資訊,說明該程序已關閉,此時釋放程序控制代碼記憶體,並重啟該程序。如果遍歷任務管理程序列表中所有程序,沒有找到與要守護的應用程式的全路徑一致的程序,說明要守護的應用程式尚未開啟,此時要啟動該應用程式,然後轉入監控流程。
值得注意的是,一定要額外分配執行緒去監控要守護的應用程式,為什麼?因為如果你用主線程(入口函式執行緒)去執行監控任務,會被長期阻塞,直到程序退出才會被啟用,這樣就無法執行後續程式。況且,監控程式要實現持續監控,要使用死迴圈,如果主線程進入死迴圈,就無法監控其他要守護的程序了。
5. **詳解
windows服務的開發步驟,請參考msdn,此處略去。下面將關鍵**貼出,加以解釋。
讀取配置檔中「processaddress」節點,獲取要守護的應用程式全目錄,驗證應用程式全目錄,如果合法,進入掃瞄任務管理器程序列表流程。
/// /// 開始監控
///
private void startwatch()}}
}}
}
開啟任務管理器,檢視一下正在執行的有哪些程序,然後逐一讀取出這些程序的全路徑,與要守護的應用程式的全路徑比對,如果一致,說明要守護的應用程式已開啟了,進入監控流程。如果遍歷任務管理程序列表中所有程序,沒有找到與要守護的應用程式的全路徑一致的程序,說明要守護的應用程式尚未開啟,此時要啟動該應用程式,然後轉入監控流程。
/// /// 掃瞄程序列表,判斷程序對應的全路徑是否與指定路徑一致
/// 如果一致,說明程序已啟動
/// 如果不一致,說明程序尚未啟動
///
///
private void scanprocesslist(string address)
}catch}}
//程序尚未啟動
process process = new process();
process.startinfo.filename = address;
process.start();
this.watchprocess(process, address);
}
分配一條執行緒,執行監控任務:
/// /// 監聽程序
///
///
///
private void watchprocess(process process, string address)
public class processrestart
/// /// 建構函式
///
///
///
public processrestart(process process, string address)
/// /// 重啟程序
///
public void restartprocess()
}catch (exception ex)
}}
Gpm 通用滑鼠守護程序
gpm 通用滑鼠守護程序 是為控制台下執行的程式提供滑鼠支援的伺服器。它不僅提供了通用的剪下和貼上支援,它的庫檔案還被許多程式 如 links 用來在程式裡實現滑鼠。它對桌面電腦很有用,尤其是使用 b lfs 的安裝指導時 在兩個控制台之間拷貝和貼上總比手動輸入容易些 也能減少錯誤 使用版本 1.2...
用 C 來守護 Python 程序
目前我主要負責的乙個專案是乙個c s架構的客戶端開發,前端主要是通過wpf相關技術來實現,後端是通過python來實現,前後端的資料通訊則是通過mq的方式來進行處理。由於python程序是需要依賴客戶端程序來執行,為了保證後端業務程序的穩定性,就需要通過乙個守護程序來守護 python 程序,防止其...
實現守護程序
目錄守護程序 也稱為精靈程序,守護程序是乙個在後台執行並且不受任何終端控制的程序。unix作業系統有很多典型的守護程序 其數目根據需要或20 50不等 它們在後台執行,執行不同的管理任務。使用者使守護程序獨立於所有終端是因為,在守護程序從乙個終端啟動的情況下,這同乙個終端可能被其他的使用者使用。ps...