Windows服務(wù)大家都不陌生,Windows服務(wù)組的概念,貌似MS并沒有這個(gè)說法。
作為一名軟件開發(fā)者,我們的機(jī)器上安裝有各種開發(fā)工具,伴隨著各種相關(guān)服務(wù)。
Visual Studio可以不打開,SqlServer Management Studio可以不打開,但是SqlServer服務(wù)卻默認(rèn)開啟了。下班后,我的計(jì)算機(jī)想用于生活、娛樂,不需要數(shù)據(jù)庫服務(wù)這些東西,尤其是在安裝了Oracle數(shù)據(jù)庫后,我感覺機(jī)器吃力的很。
每次開機(jī)后去依次關(guān)閉服務(wù),或者設(shè)置手動(dòng)開啟模式,每次工作使用時(shí)依次去開啟服務(wù),都是一件很麻煩的事情。因此,我講這些相關(guān)服務(wù)進(jìn)行打包,打包為一個(gè)服務(wù)組的概念,并通過程序來實(shí)現(xiàn)服務(wù)的啟動(dòng)和停止。
這樣我就可以設(shè)置SqlServer、Oracle、Vmware等的服務(wù)為手動(dòng)開啟,然后在需要的時(shí)候選擇打開。
以上廢話為工具編寫背景,也是一個(gè)應(yīng)用場景描述,下邊附上代碼。
服務(wù)組的定義,我使用了INI配置文件,一個(gè)配置節(jié)為一個(gè)服務(wù)器組,配置節(jié)內(nèi)的Key、Value為服務(wù)描述和服務(wù)名稱。
配置內(nèi)容的先后決定了服務(wù)開啟的順序,因此類似Oracle這樣的對(duì)于服務(wù)開啟先后順序有要求的,要定義好服務(wù)組內(nèi)的先后順序。
Value值為服務(wù)名稱,服務(wù)名稱并非services.msc查看的名稱欄位的值,右鍵服務(wù),可以看到,顯示的名稱其實(shí)是服務(wù)的顯示名稱,這里需要的是服務(wù)名稱。
配置文件如下圖所示
注:INI文件格式:
[Section1]
key1=value1
key2=value2
程序啟動(dòng),主窗體加載,獲取配置節(jié),即服務(wù)組。
string path = Directory.GetCurrentDirectory() + "/config.ini"; List<string> serviceGroups = INIHelper.GetAllSectionNames(path); cboServiceGroup.DataSource = serviceGroups;
其中的INI服務(wù)類,參考鏈接:C#操作INI文件的輔助類IniHelper
服務(wù)的啟動(dòng)和停止,需要引入System.ServiceProcess程序集。
啟動(dòng)服務(wù)組:
if (string.IsNullOrEmpty(cboServiceGroup.Text)){ MessageBox.Show("請(qǐng)選擇要操作的服務(wù)組"); return;}//string path = Directory.GetCurrentDirectory() + "/config.ini";string section = cboServiceGroup.Text;string[] keys;string[] values;INIHelper.GetAllKeyValues(section, out keys, out values, path);//foreach (string value in values){ ServiceController sc = new ServiceController(value); // try { ServiceControllerStatus scs = sc.Status; if (scs != ServiceControllerStatus.Running) { try { sc.Start(); } catch (Exception ex) { MessageBox.Show("服務(wù)啟動(dòng)失敗/n" + ex.ToString()); } } } catch (Exception ex) { MessageBox.Show("不存在服務(wù)" + value); } // }//MessageBox.Show("服務(wù)啟動(dòng)完成");
停止服務(wù)組
if (string.IsNullOrEmpty(cboServiceGroup.Text)){ MessageBox.Show("請(qǐng)選擇要操作的服務(wù)組"); return;}//string path = Directory.GetCurrentDirectory() + "/config.ini";string section = cboServiceGroup.Text;string[] keys;string[] values;INIHelper.GetAllKeyValues(section, out keys, out values, path);//foreach (string value in values){ ServiceController sc = new ServiceController(value); try { ServiceControllerStatus scs = sc.Status; if (scs != ServiceControllerStatus.Stopped) { try { sc.Stop(); } catch (Exception ex) { MessageBox.Show("服務(wù)停止失敗/n" + ex.ToString()); } } } catch (Exception ex) { MessageBox.Show("不存在服務(wù)" + value); } //}//MessageBox.Show("服務(wù)停止完成");}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注