柏建明,梁軍,裴偉
(中色(寧夏)東方集團有限公司,石嘴山753000)
任務(wù)計劃程序是Windows系統(tǒng)的一個工具,可以定時執(zhí)行用戶指定的程序。如果想在自己開發(fā)的軟件中直接加上任務(wù)計劃功能,該如何實現(xiàn)呢。本文使用C#語言,編寫一個任務(wù)計劃程序,讓程序在系統(tǒng)托盤后臺定時執(zhí)行文件或數(shù)據(jù)庫的備份作業(yè)。程序運行初始,用戶將備份時間、備份內(nèi)容、存儲目標、保存周期幾個參數(shù)設(shè)定好并保存,程序最小化到系統(tǒng)托盤定時執(zhí)行指定的備份作業(yè)。在用戶指定的時間點自動備份用戶數(shù)據(jù)到指定的存儲空間,并檢索是否有備份數(shù)據(jù)超過保存期限,如果過期了就刪除,確保存儲空間足夠。
選擇“Windows窗體應(yīng)用程序”創(chuàng)建項目,添加一個主窗體(frmMain,圖 1),并添加托盤圖標控件“notify?icon”和一個同托盤圖標相關(guān)聯(lián)的右鍵菜單控件“con?textMenuStrip”。右鍵菜單設(shè)置“打開窗口”、“關(guān)閉窗口”、“退出程序”三個菜單,由此用戶可以在系統(tǒng)托盤里操作程序主界面。
再添加一個參數(shù)設(shè)定窗體(frmPrarameter,圖2),作為軟件初始化運行時用戶對執(zhí)行時間、備份內(nèi)容、存儲目標、保存周期幾個參數(shù)進行設(shè)定的用戶界面。在項目中添加一個以“.settings”為后綴的“設(shè)置文件”,將參數(shù)設(shè)定窗體中的參數(shù)類型和命名管理交給這個設(shè)置文件,由這個文件對這些參數(shù)進行設(shè)置和定義。程序運行時,實際的用戶參數(shù)將保存在一個運行目錄中。
圖1 主窗體
主窗體最小化到系統(tǒng)托盤(點擊主窗體的“關(guān)閉窗口”按鈕):
系統(tǒng)托盤里的本程序圖標對鼠標的左右鍵單擊反應(yīng):
系統(tǒng)托盤里的本程序圖標的菜單功能(對控件“contextMenuStrip”的“打開窗口”、“關(guān)閉窗口”、“退出程序”菜單添加單擊代碼,這里僅列出“打開窗口”的代碼):
用戶設(shè)定參數(shù)后,保存在運行目錄的“AppSettings.settings”文件中,程序下次運行后,將首先讀取上次保存的參數(shù)并在參數(shù)窗口顯示。
為了保證參數(shù)窗體在關(guān)閉后將設(shè)置好的參數(shù)傳給主窗體,并將主窗體的提示信息刷新,采用事件委托方法來處理這一過程。參數(shù)設(shè)定窗體中定義一個委托事件,當參數(shù)設(shè)定窗體中的參數(shù)設(shè)置并保存后,通知主窗體刷新當前備份信息。
在參數(shù)設(shè)定窗體關(guān)閉事件中調(diào)用此委托事件,并且將主窗體顯示出來,
當在主窗體中打開參數(shù)設(shè)定窗體時,訂閱此委托事件,并將一個刷新方法(RefreshControl)傳遞過去,方法RefreshControl在設(shè)定參數(shù)改變后刷新主窗體的提示信息。
為了讓程序定時執(zhí)行,引用系統(tǒng)時鐘類作為定時器,按一定的時間間隔查看是否符合備份作業(yè)的設(shè)定時間,并在窗體構(gòu)造函數(shù)中執(zhí)行這一線程。
備份的內(nèi)容分為多個文件、文件夾、數(shù)據(jù)庫(SQL Server、Oracle、MySQL),需要在程序的參數(shù)界面事先設(shè)定備份的源路徑(文件和文件夾)、數(shù)據(jù)庫類型和用戶信息、備份的目標路徑(可以是本機、非本機共享目錄、SAN磁盤)、備份數(shù)據(jù)保存周期。
開始備份前,檢查是否存在指定的目標路徑,不存在就新建;檢查是否存在過期備份文件,有過期文件就刪除。對于備份的文件夾而言,檢索并刪除過期文件夾的語句稍有不同,此處省略。
所有備份的文件、文件夾、數(shù)據(jù)庫在目標路徑中重新命名,命名規(guī)則:原文件名(或原文件夾名、或原數(shù)據(jù)庫名)+備份日期。以下僅列出SQL Server數(shù)據(jù)庫的備份代碼:
本方法將用戶設(shè)定的備份參數(shù)獨立出來,作為一個單獨的配置文件由主體程序在執(zhí)行時讀取,提高了程序的靈活性和通用性。在程序中集成任務(wù)計劃功能,以系統(tǒng)托盤控制的方式運行,使得程序操作簡潔且安全??梢詫崿F(xiàn)對多個文件、文件夾、數(shù)據(jù)庫(SQL Server、Oracle、MySQL)進行定時自動備份功能。程序中以當前時間作為備份保存周期的日期上限,倒推出備份保存周期的日期下限,刪除過期備份數(shù)據(jù)并備份新的數(shù)據(jù),確保備份數(shù)據(jù)留存一定的周期并使存儲空間足夠。這是系統(tǒng)管理員進行備份管理工作的一個很好工具,很適合一般中小企業(yè)數(shù)據(jù)中心使用。