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