C#製作可控制介面的windows服務
在前面兩篇文章中,我們可以做到自啟動windows和定時自動執行windows service
系列一: 製作一個可安裝、可啟動、可停止、可解除安裝的Windows service(downmoon原創)
系列二:演示一個定期執行的windows服務及除錯(windows service)(downmoon)
系列三: windows service系列三--製作可控制介面的windows service
本文將重點介紹下如何透過介面控制肉眼看不到的windows service。其實主要用到的類是:
ServiceController ,可以看官方 的說明,如果急於看到結果,請直接往下看。
準備工作:假定我們已經做好一個wondows service,並且已經部署,服務名為pingServiceDemo,
下面我們製作一個可控制的介面來操作這個windows service
開始:
第一步:新建一個winform專案,名為 CtrlPingService,新增System.ServiceProcess.dll的引用。
第二步:定義變數,新增按鈕事件,主要程式碼如下:
private System.Windows.Forms.Button btnStart; private System.Windows.Forms.Button btnStop; private System.Windows.Forms.Button btnExit; private System.ServiceProcess.ServiceController sController; private Label lbInfo; private Button ftnPause; private Button btnResume; private Label lbServiceName; private TextBox txtServerName; private Button btnServiceState; private string serverName; #region Ecents private void frmMain_Load(object sender, EventArgs e) { if (serverName == null) { serverName = txtServerName.Text.Trim(); } lbInfo.Text = "當前服務狀態是:" + getStateForService(serverName); } private void btnServiceState_Click(object sender, EventArgs e) { lbInfo.Text = "當前服務狀態是:" + getStateForService(serverName); } private void btnStart_Click(object sender, System.EventArgs e) { runService(serverName); } private void btnStop_Click(object sender, System.EventArgs e) { killService(serverName); } private void ftnPause_Click(object sender, EventArgs e) { pauseService(serverName); } private void btnResume_Click(object sender, EventArgs e) { resumeService(serverName); } private void btnExit_Click(object sender, System.EventArgs e) { this.Close(); Application.Exit(); } #endregion
第三步:新增用到的方法,程式碼如下:
#region Methods private void runService(string servername) { ServiceController sc = new ServiceController(servername); ServiceControllerStatus st = sc.Status; switch (st) { case ServiceControllerStatus.StopPending: case ServiceControllerStatus.Stopped: sc.Start(); break; default: break; } sc.WaitForStatus(ServiceControllerStatus.Running); st = sc.Status;//再次獲取服務狀態 if (st == ServiceControllerStatus.Running) { lbInfo.Text = "服務 " + sc.ServiceName + " 已經啟動!"; } } private void killService(string servername) { ServiceController sc = new ServiceController(servername); ServiceControllerStatus st = sc.Status; switch (st) { case ServiceControllerStatus.Running: case ServiceControllerStatus.StartPending: case ServiceControllerStatus.Paused: case ServiceControllerStatus.PausePending: case ServiceControllerStatus.ContinuePending: sc.Stop(); sc.WaitForStatus(ServiceControllerStatus.Stopped); break; } st = sc.Status;//再次獲取服務狀態 if (st == ServiceControllerStatus.Stopped) { lbInfo.Text = "服務 " + sc.ServiceName + " 已經停止!"; } } private void pauseService(string servername) { ServiceController sc = new ServiceController(servername); ServiceControllerStatus st = sc.Status; switch (st) { case ServiceControllerStatus.Running: case ServiceControllerStatus.StartPending: sc.Pause(); sc.WaitForStatus(ServiceControllerStatus.Paused); break; } st = sc.Status;//再次獲取服務狀態 if (st == ServiceControllerStatus.Paused) { lbInfo.Text = "服務 " + sc.ServiceName + " 已經暫停!"; } } private void resumeService(string servername) { ServiceController sc = new ServiceController(servername); ServiceControllerStatus st = sc.Status; switch (st) { case ServiceControllerStatus.Paused: case ServiceControllerStatus.PausePending: sc.Continue(); sc.WaitForStatus(ServiceControllerStatus.Running); break; } st = sc.Status;//再次獲取服務狀態 if (st == ServiceControllerStatus.Running) { lbInfo.Text = "服務 " + sc.ServiceName + " 已經繼續!"; } } private string getStateForService(string servername) { ServiceController sc = new ServiceController(servername); ServiceControllerStatus st = sc.Status; return sc.Status.ToString(); } #endregion
OK! 最後欣賞下我們的成果:
總結:其實WCF完全可以做到這些。這裡只是作了一個簡單演示。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2618/viewspace-2800497/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# 註冊Windows服務C#Windows
- 使用C#建立windows服務續之使用Topshelf優化Windows服務C#Windows優化
- 服務流程之全面的滲透測試服務介紹
- 利用WinSW將Nginx 作為可正常啟動/停止的windows服務NginxWindows
- C# Windows Service 服務程式的編寫C#Windows
- C#開發Windows服務詳細流程C#Windows
- C#/.NET基於Topshelf建立Windows服務的守護程式作為服務啟動的客戶端桌面程式不顯示UI介面的問題分析和解決方案C#Windows客戶端UI
- Windows Secondary Logon服務中的一個控制程式碼許可權洩露BugWindowsGo
- 使用C#建立安裝Windows服務程式(乾貨)C#Windows
- C#開發一個混合Windows服務和Windows窗體的程式C#Windows
- Windows 服務管理Windows
- 在Windows低許可權下利用服務進行提權Windows
- win10啟動windows服務顯示服務沒有響應控制功能怎麼解決Win10Windows
- Windows刪除服務Windows
- 直播平臺製作,登入頁面的切換
- C#建立WebSocket服務端C#Web服務端
- windows10系統盤製作Windows
- windows10主題製作怎麼操作_windows10電腦主題如何自己製作Windows
- 簡單介紹Windows中將Nginx新增為服務的問題WindowsNginx
- windows 安裝Nginx服務WindowsNginx
- 零基礎創作專業wordpress網站09-製作服務頁面網站
- 客戶服務管理資料視覺化大屏製作教程視覺化
- 淺談服務介面的高可用設計
- 控制linux啟動的服務Linux
- python製作exe可執行表白神器Python
- [WCF許可權控制]透過擴充套件自行實現服務授權套件
- windows10建立U盤安裝介質流程_win10 U盤安裝介質如何製作WindowsWin10
- 如何製作windows啟動盤 u盤製作win10啟動盤WindowsWin10
- 介紹如何在Spring Cloud中使用Zookeeper作為服務註冊中心SpringCloud
- 遊戲音訊服務商SIDE設立全新東京工作室,提供日語配音製作服務遊戲音訊IDE
- PS動作快速製作可愛餅乾文字效果
- 使用InstallUtil釋出windows服務Windows
- Windows關閉Microsoft Defender服務WindowsROS
- windows下安裝Tomcat服務WindowsTomcat
- 使用.NET Core建立Windows服務Windows
- windows開啟ssh服務教程Windows
- windows下啟動nacos服務Windows
- C# 實現 gRPC 服務和呼叫C#RPC