C#中调用Windows系统服务exe程序的工具类与重启服务的流程
生活随笔
收集整理的這篇文章主要介紹了
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程序的工具类与重启服务的流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winform中怎样对窗体进行隐藏,再次
- 下一篇: Android中点击按钮获取string