日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中调用Windows系统服务exe程序的工具类与重启服务的流程

發布時間:2025/3/19 C# 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中调用Windows系统服务exe程序的工具类与重启服务的流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

使用C#編寫的Windows服務程序,在Winform中進行調用。

常用工具類方法檢測服務是否存在或者安裝,獲取服務狀態,啟動服務,停止服務的方法。

以在Winform中重啟服務為例。

注:

博客主頁:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載

實現

新建工具類WinServiceHelper

檢測服務是否安裝或者存在的方法

??????? /// <summary>/// 服務是否安裝/存在/// </summary>/// <param name="serviceName">服務名</param>/// <returns></returns>public static bool IsServiceInstalled(string serviceName){bool exists = false;System.ServiceProcess.ServiceController[] services = System.ServiceProcess.ServiceController.GetServices();foreach (System.ServiceProcess.ServiceController s in services){if (s.ServiceName == serviceName){exists = true;break;}}return exists;}

獲取服務狀態的方法

??????? /// <summary>/// 獲取服務狀態/// </summary>/// <param name="serviceName"></param>/// <returns></returns>public static String GetServiceStatus(string serviceName){string result = "服務不存在";System.ServiceProcess.ServiceController[] services = System.ServiceProcess.ServiceController.GetServices();foreach (System.ServiceProcess.ServiceController s in services){if (s.ServiceName == serviceName){result = s.Status.ToString();break;}}return result;}

注:

服務狀態返回值是枚舉類型,具體返回值如下

? ? // 摘要://???? 指示服務的當前狀態。public enum ServiceControllerStatus{// 摘要://???? 服務未運行。這對應于 Win32 SERVICE_STOPPED 常數,該常數定義為 0x00000001。Stopped = 1,//// 摘要://???? 服務正在啟動。這對應于 Win32 SERVICE_START_PENDING 常數,該常數定義為 0x00000002。StartPending = 2,//// 摘要://???? 服務正在停止。這對應于 Win32 SERVICE_STOP_PENDING 常數,該常數定義為 0x00000003。StopPending = 3,//// 摘要://???? 服務正在運行。這對應于 Win32 SERVICE_RUNNING 常數,該常數定義為 0x00000004。Running = 4,//// 摘要://???? 服務即將繼續。這對應于 Win32 SERVICE_CONTINUE_PENDING 常數,該常數定義為 0x00000005。ContinuePending = 5,//// 摘要://???? 服務即將暫停。這對應于 Win32 SERVICE_PAUSE_PENDING 常數,該常數定義為 0x00000006。PausePending = 6,//// 摘要://???? 服務已暫停。這對應于 Win32 SERVICE_PAUSED 常數,該常數定義為 0x00000007。Paused = 7,}

啟動服務的方法

??????? /// <summary>/// 啟動服務/// </summary>/// <param name="serivceExeFullPath">服務全路徑</param>/// <param name="serviceName">服務名</param>/// <returns></returns>public static bool ServiceStart(string serivceExeFullPath ,string serviceName){if (!IsServiceInstalled(serviceName)){MessageBox.Show("服務未安裝,請先安裝!");return false;}try{using (System.Diagnostics.Process p = new System.Diagnostics.Process()){p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.CreateNoWindow = true;p.StartInfo.FileName = serivceExeFullPath;p.StartInfo.Arguments = "start";p.Start();p.Close();}System.Threading.Thread.Sleep(2000);return true;}catch (Exception ex){MessageBox.Show("服務安裝異常:" + ex.Message);return false;}}

停止服務的方法

??????? /// <summary>///? 停止服務/// </summary>/// <param name="serivceExeFullPath">服務全路徑</param>/// <param name="serviceName">服務名</param>/// <returns></returns>public static bool ServiceStop(string serivceExeFullPath, string serviceName){if (!IsServiceInstalled(serviceName)){MessageBox.Show("服務未安裝,請先安裝!");return false;}try{using (System.Diagnostics.Process p = new System.Diagnostics.Process()){p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardInput = true;p.StartInfo.CreateNoWindow = true;p.StartInfo.FileName = serivceExeFullPath;p.StartInfo.Arguments = "stop";p.Start();p.WaitForExit();p.Close();}System.Threading.Thread.Sleep(2000);return true;}catch (Exception ex){MessageBox.Show("服務停止異常:" + ex.Message);return false;}}

重啟服務示例

在重啟服務的按鈕的點擊事件中

????? //檢測服務是否安裝bool isInstalled = WinServiceHelper.IsServiceInstalled(Global.BTS_DATA_SERVICE_NAME);if (!isInstalled){MessageBox.Show("重啟失敗,服務"+Global.BTS_DATA_SERVICE_NAME+"未安裝或未啟動");return;}string serviceStatus = WinServiceHelper.GetServiceStatus(Global.BTS_DATA_SERVICE_NAME);if (!serviceStatus.Equals(System.ServiceProcess.ServiceControllerStatus.Running.ToString())){MessageBox.Show("重啟失敗,服務" + Global.BTS_DATA_SERVICE_NAME + "狀態為:" + serviceStatus);return;}string serivceExeFullPath = Global.AppConfig.BtsDataServiceExe;string serviceName = Global.BTS_DATA_SERVICE_NAME;bool isStopSuccess = WinServiceHelper.ServiceStop(serivceExeFullPath,serviceName);//停止失敗if (!isStopSuccess){MessageBox.Show("重啟失敗,服務" + Global.BTS_DATA_SERVICE_NAME + "停止失敗");return;}//方法里已經休眠2秒bool isStartSuccess = WinServiceHelper.ServiceStart(serivceExeFullPath, serviceName);//啟動失敗if (!isStartSuccess){MessageBox.Show("重啟失敗,服務" + Global.BTS_DATA_SERVICE_NAME + "啟動失敗");return;}MessageBox.Show("服務" + Global.BTS_DATA_SERVICE_NAME + "重啟成功");

?

總結

以上是生活随笔為你收集整理的C#中调用Windows系统服务exe程序的工具类与重启服务的流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。