C#對(duì)Windows服務(wù)組的啟動(dòng)與停止操作
Windows服務(wù)大家都不陌生,Windows服務(wù)組的概念,貌似MS并沒(méi)有這個(gè)說(shuō)法。
作為一名軟件開(kāi)發(fā)者,我們的機(jī)器上安裝有各種開(kāi)發(fā)工具,伴隨著各種相關(guān)服務(wù)。
Visual Studio可以不打開(kāi),SqlServer Management Studio可以不打開(kāi),但是SqlServer服務(wù)卻默認(rèn)開(kāi)啟了。下班后,我的計(jì)算機(jī)想用于生活、娛樂(lè),不需要數(shù)據(jù)庫(kù)服務(wù)這些東西,尤其是在安裝了Oracle數(shù)據(jù)庫(kù)后,我感覺(jué)機(jī)器吃力的很。
每次開(kāi)機(jī)后去依次關(guān)閉服務(wù),或者設(shè)置手動(dòng)開(kāi)啟模式,每次工作使用時(shí)依次去開(kāi)啟服務(wù),都是一件很麻煩的事情。因此,我講這些相關(guān)服務(wù)進(jìn)行打包,打包為一個(gè)服務(wù)組的概念,并通過(guò)程序來(lái)實(shí)現(xiàn)服務(wù)的啟動(dòng)和停止。
這樣我就可以設(shè)置SqlServer、Oracle、Vmware等的服務(wù)為手動(dòng)開(kāi)啟,然后在需要的時(shí)候選擇打開(kāi)。
以上廢話為工具編寫(xiě)背景,也是一個(gè)應(yīng)用場(chǎng)景描述,下邊附上代碼。

服務(wù)組的定義,我使用了INI配置文件,一個(gè)配置節(jié)為一個(gè)服務(wù)器組,配置節(jié)內(nèi)的Key、Value為服務(wù)描述和服務(wù)名稱。
配置內(nèi)容的先后決定了服務(wù)開(kāi)啟的順序,因此類似Oracle這樣的對(duì)于服務(wù)開(kāi)啟先后順序有要求的,要定義好服務(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ù)停止完成");
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#實(shí)現(xiàn)Windows服務(wù)測(cè)試與調(diào)試
- C#創(chuàng)建Windows服務(wù)與服務(wù)的安裝、卸載
- C#創(chuàng)建控制Windows服務(wù)
- C#創(chuàng)建Windows服務(wù)的實(shí)現(xiàn)方法
- C#使用windows服務(wù)開(kāi)啟應(yīng)用程序的方法
- C#實(shí)現(xiàn)操作windows系統(tǒng)服務(wù)(service)的方法
- c#創(chuàng)建windows服務(wù)入門教程實(shí)例
- c#創(chuàng)建windows服務(wù)(Windows Services)詳細(xì)步驟
- C#編寫(xiě)Windows服務(wù)實(shí)例代碼
- C#操作Windows服務(wù)類System.ServiceProcess.ServiceBase
相關(guān)文章
Unity實(shí)現(xiàn)10天簽到系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)10天簽到系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
ListView用法中與滾動(dòng)相關(guān)的需求實(shí)現(xiàn)
這篇文章主要介紹了ListView用法中與滾動(dòng)相關(guān)的需求實(shí)現(xiàn),獲取并設(shè)置ListView的滾動(dòng)位置,以及獲取滾動(dòng)位置處的項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
VS2019屬性管理器沒(méi)有Microsoft.Cpp.x64.user的解決辦法
這篇文章主要介紹了VS2019屬性管理器沒(méi)有Microsoft.Cpp.x64.user的解決辦法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
C#在WinForm中使用WebKit傳遞js對(duì)象實(shí)現(xiàn)與網(wǎng)頁(yè)交互的方法
這篇文章主要介紹了C#在WinForm中使用WebKit傳遞js對(duì)象實(shí)現(xiàn)與網(wǎng)頁(yè)交互的方法,涉及針對(duì)WebBroswer控件及WebKit控件的相關(guān)使用技巧,需要的朋友可以參考下2016-03-03
Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
基于Unity實(shí)現(xiàn)2D邊緣檢測(cè)
這篇文章主要介紹了如何利用Unity實(shí)現(xiàn)2D邊緣檢測(cè),從而達(dá)到人物描邊效果。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04
WinForm實(shí)現(xiàn)窗體最大化并遮蓋任務(wù)欄的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)窗體最大化并遮蓋任務(wù)欄的方法,涉及C#實(shí)現(xiàn)WinForm窗體全屏顯示的實(shí)現(xiàn)及調(diào)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08

