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服務C#Windows
- asp.net 控制windows服務ASP.NETWindows
- 服務流程之全面的滲透測試服務介紹
- C#自定義控制元件製作篇C#控制元件
- 用delphi製作無介面的activex控制元件控制元件
- 使用C#建立windows服務續之使用Topshelf優化Windows服務C#Windows優化
- 利用WinSW將Nginx 作為可正常啟動/停止的windows服務NginxWindows
- SC-控制Windows服務的命令薦Windows
- C# Windows Service 服務程式的編寫C#Windows
- C#開發Windows服務詳細流程C#Windows
- iOS 實現多個可變 cell 複雜介面的製作iOS
- Windows下常見Oracle服務介紹(zt)WindowsOracle
- C#/.NET基於Topshelf建立Windows服務的守護程式作為服務啟動的客戶端桌面程式不顯示UI介面的問題分析和解決方案C#Windows客戶端UI
- 將程式製作為服務執行的方法
- 使用C#建立安裝Windows服務程式(乾貨)C#Windows
- C#開發一個混合Windows服務和Windows窗體的程式C#Windows
- 將redis作為windows系統的系統服務RedisWindows
- C#開發可以視覺化操作的windows服務C#視覺化Windows
- 用C#開發Windows服務監控系統使用C#Windows
- Windows 服務管理Windows
- Windows Secondary Logon服務中的一個控制程式碼許可權洩露BugWindowsGo
- java程式在windows系統作為服務程式執行JavaWindows
- R1-001 作業系統服務簡介作業系統
- 在Windows低許可權下利用服務進行提權Windows
- windows配置MySql服務WindowsMySql
- Windows服務詳解Windows
- windows 服務例項Windows
- Windows刪除服務Windows
- win10啟動windows服務顯示服務沒有響應控制功能怎麼解決Win10Windows
- 遊戲音訊服務商SIDE設立全新東京工作室,提供日語配音製作服務遊戲音訊IDE
- 客戶服務管理資料視覺化大屏製作教程視覺化
- 零基礎創作專業wordpress網站09-製作服務頁面網站
- 直播平臺製作,登入頁面的切換
- ElasticSearch註冊Windows服務ElasticsearchWindows
- Windows手工建立服務方法Windows
- windows 安裝Nginx服務WindowsNginx
- 電商圖片線上製作,可摳圖可寫文案