C#對Windows服務(wù)組的啟動與停止操作
Windows服務(wù)大家都不陌生,Windows服務(wù)組的概念,貌似MS并沒有這個說法。
作為一名軟件開發(fā)者,我們的機器上安裝有各種開發(fā)工具,伴隨著各種相關(guān)服務(wù)。
Visual Studio可以不打開,SqlServer Management Studio可以不打開,但是SqlServer服務(wù)卻默認開啟了。下班后,我的計算機想用于生活、娛樂,不需要數(shù)據(jù)庫服務(wù)這些東西,尤其是在安裝了Oracle數(shù)據(jù)庫后,我感覺機器吃力的很。
每次開機后去依次關(guān)閉服務(wù),或者設(shè)置手動開啟模式,每次工作使用時依次去開啟服務(wù),都是一件很麻煩的事情。因此,我講這些相關(guān)服務(wù)進行打包,打包為一個服務(wù)組的概念,并通過程序來實現(xiàn)服務(wù)的啟動和停止。
這樣我就可以設(shè)置SqlServer、Oracle、Vmware等的服務(wù)為手動開啟,然后在需要的時候選擇打開。
以上廢話為工具編寫背景,也是一個應(yīng)用場景描述,下邊附上代碼。
服務(wù)組的定義,我使用了INI配置文件,一個配置節(jié)為一個服務(wù)器組,配置節(jié)內(nèi)的Key、Value為服務(wù)描述和服務(wù)名稱。
配置內(nèi)容的先后決定了服務(wù)開啟的順序,因此類似Oracle這樣的對于服務(wù)開啟先后順序有要求的,要定義好服務(wù)組內(nèi)的先后順序。
Value值為服務(wù)名稱,服務(wù)名稱并非services.msc查看的名稱欄位的值,右鍵服務(wù),可以看到,顯示的名稱其實是服務(wù)的顯示名稱,這里需要的是服務(wù)名稱。
配置文件如下圖所示
注:INI文件格式:
[Section1]
key1=value1
key2=value2
程序啟動,主窗體加載,獲取配置節(jié),即服務(wù)組。
string path = Directory.GetCurrentDirectory() + "/config.ini"; List<string> serviceGroups = INIHelper.GetAllSectionNames(path); cboServiceGroup.DataSource = serviceGroups;
其中的INI服務(wù)類,參考鏈接:C#操作INI文件的輔助類IniHelper
服務(wù)的啟動和停止,需要引入System.ServiceProcess程序集。
啟動服務(wù)組:
if (string.IsNullOrEmpty(cboServiceGroup.Text))
{
MessageBox.Show("請選擇要操作的服務(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ù)啟動失敗\n" + ex.ToString());
}
}
}
catch (Exception ex)
{
MessageBox.Show("不存在服務(wù)" + value);
}
//
}
//
MessageBox.Show("服務(wù)啟動完成");
停止服務(wù)組
if (string.IsNullOrEmpty(cboServiceGroup.Text))
{
MessageBox.Show("請選擇要操作的服務(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)容,希望對大家的學習有所幫助,也希望大家多多支持我們。
上一篇:C# 使用 GDI+ 實現(xiàn)添加中心旋轉(zhuǎn)(任意角度)的文字
欄 目:C#教程
本文標題:C#對Windows服務(wù)組的啟動與停止操作
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5228.html
您可能感興趣的文章
- 01-10C#實現(xiàn)自定義windows系統(tǒng)日志的方法
- 01-10C#使用Dispose模式實現(xiàn)手動對資源的釋放
- 01-10C#3.0使用EventLog類寫Windows事件日志的方法
- 01-10C#使用windows服務(wù)開啟應(yīng)用程序的方法
- 01-10C#實現(xiàn)獲取不同對象中名稱相同屬性的方法
- 01-10C#編程自學之類和對象
- 01-10C#編程和Visual Studio使用技巧(上)
- 01-10C#語句先后順序?qū)Τ绦虻慕Y(jié)果有影響嗎
- 01-10C#編程實現(xiàn)對象與JSON串互相轉(zhuǎn)換實例分析
- 01-10C#微信開發(fā)(服務(wù)器配置)


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已
隨機閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法


