柏建明,梁軍,裴偉
(中色(寧夏)東方集團有限公司,石嘴山753000)
任務計劃程序是Windows系統的一個工具,可以定時執行用戶指定的程序。如果想在自己開發的軟件中直接加上任務計劃功能,該如何實現呢。本文使用C#語言,編寫一個任務計劃程序,讓程序在系統托盤后臺定時執行文件或數據庫的備份作業。程序運行初始,用戶將備份時間、備份內容、存儲目標、保存周期幾個參數設定好并保存,程序最小化到系統托盤定時執行指定的備份作業。在用戶指定的時間點自動備份用戶數據到指定的存儲空間,并檢索是否有備份數據超過保存期限,如果過期了就刪除,確保存儲空間足夠。
選擇“Windows窗體應用程序”創建項目,添加一個主窗體(frmMain,圖 1),并添加托盤圖標控件“notify?icon”和一個同托盤圖標相關聯的右鍵菜單控件“con?textMenuStrip”。右鍵菜單設置“打開窗口”、“關閉窗口”、“退出程序”三個菜單,由此用戶可以在系統托盤里操作程序主界面。
再添加一個參數設定窗體(frmPrarameter,圖2),作為軟件初始化運行時用戶對執行時間、備份內容、存儲目標、保存周期幾個參數進行設定的用戶界面。在項目中添加一個以“.settings”為后綴的“設置文件”,將參數設定窗體中的參數類型和命名管理交給這個設置文件,由這個文件對這些參數進行設置和定義。程序運行時,實際的用戶參數將保存在一個運行目錄中。

圖1 主窗體
主窗體最小化到系統托盤(點擊主窗體的“關閉窗口”按鈕):
系統托盤里的本程序圖標對鼠標的左右鍵單擊反應:

系統托盤里的本程序圖標的菜單功能(對控件“contextMenuStrip”的“打開窗口”、“關閉窗口”、“退出程序”菜單添加單擊代碼,這里僅列出“打開窗口”的代碼):

用戶設定參數后,保存在運行目錄的“AppSettings.settings”文件中,程序下次運行后,將首先讀取上次保存的參數并在參數窗口顯示。

為了保證參數窗體在關閉后將設置好的參數傳給主窗體,并將主窗體的提示信息刷新,采用事件委托方法來處理這一過程。參數設定窗體中定義一個委托事件,當參數設定窗體中的參數設置并保存后,通知主窗體刷新當前備份信息。

在參數設定窗體關閉事件中調用此委托事件,并且將主窗體顯示出來,

當在主窗體中打開參數設定窗體時,訂閱此委托事件,并將一個刷新方法(RefreshControl)傳遞過去,方法RefreshControl在設定參數改變后刷新主窗體的提示信息。


為了讓程序定時執行,引用系統時鐘類作為定時器,按一定的時間間隔查看是否符合備份作業的設定時間,并在窗體構造函數中執行這一線程。


備份的內容分為多個文件、文件夾、數據庫(SQL Server、Oracle、MySQL),需要在程序的參數界面事先設定備份的源路徑(文件和文件夾)、數據庫類型和用戶信息、備份的目標路徑(可以是本機、非本機共享目錄、SAN磁盤)、備份數據保存周期。
開始備份前,檢查是否存在指定的目標路徑,不存在就新建;檢查是否存在過期備份文件,有過期文件就刪除。對于備份的文件夾而言,檢索并刪除過期文件夾的語句稍有不同,此處省略。

所有備份的文件、文件夾、數據庫在目標路徑中重新命名,命名規則:原文件名(或原文件夾名、或原數據庫名)+備份日期。以下僅列出SQL Server數據庫的備份代碼:


本方法將用戶設定的備份參數獨立出來,作為一個單獨的配置文件由主體程序在執行時讀取,提高了程序的靈活性和通用性。在程序中集成任務計劃功能,以系統托盤控制的方式運行,使得程序操作簡潔且安全??梢詫崿F對多個文件、文件夾、數據庫(SQL Server、Oracle、MySQL)進行定時自動備份功能。程序中以當前時間作為備份保存周期的日期上限,倒推出備份保存周期的日期下限,刪除過期備份數據并備份新的數據,確保備份數據留存一定的周期并使存儲空間足夠。這是系統管理員進行備份管理工作的一個很好工具,很適合一般中小企業數據中心使用。