如何在網頁啟動Windows服務

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   for   

由於公司有許多windows服務進行業務的處理,所謂對服務的維護也是一個比較頭痛的問題,因為自己也不知道服務什麼時候自動停了,而 且更主要的原因是服務都是由營運部門在維護管理,開發這邊沒有直接操作服務的許可權,所以利用網頁監控服務就很重要了(在服務中也可以增加寄件提醒,比如服 務報錯或者斷掉)。

如何擷取電腦上的所有服務:

使用.Net架構類庫中內建的組件ServiceController可以實現對 Windows服務的操作。

1、首先要在你的項目添加引用System.ServiceProcess命名空間;

2、建立ServiceController的執行個體;

//擷取當前電腦上的所有非裝置驅動程式服務ServiceController[] myServices = ServiceController.GetServices();

GetServices方法有一個重載,預設擷取原生服務,如果想擷取某台機器上的服務,則要指定機器名,前提是要有許可權擷取。

由於是用網頁擷取電腦上的所有服務,我就直接貼網頁後台代碼了,如下:

protected void Page_Load(object sender, EventArgs e) { ServiceController[] myServices = ServiceController.GetServices(); list = new List<ServiceModel>(); foreach (var item in myServices) { if (item.ServiceType == ServiceType.Win32OwnProcess) { ServiceModel model = new ServiceModel(); model.ServiceName = item.ServiceName; model.DisplayName = item.DisplayName; if (item.Status == ServiceControllerStatus.Running) model.IsRunning = true; else model.IsRunning = false; list.Add(model); } } }

其中ServiceModel是我建立的一個實體類,用來儲存相關服務的資訊。前提頁面部分如下:

根據服務的目前狀態,可以對服務進行:停止、啟動、重啟等操作。由於我是根據點擊的操作,傳到一般處理常式進行處理的,所以直接上代碼,很簡單:

public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //服務名 string serviceName = context.Request.QueryString["serviceName"]; //操作類型【重啟、停止、重啟】 string type = context.Request.QueryString["type"]; try { switch (type) { case "start": StartService(serviceName); break; case "stop": StopService(serviceName); break; case "reset": ResetService(serviceName); break; default: ResetService(serviceName); break; } context.Response.Write("ok"); } catch (Exception ex) { context.Response.Write(ex.Message); } } /// <summary> /// 啟動服務 /// </summary> /// <param name="serviceName">服務名</param> private void StartService(string serviceName) { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Stopped) { service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); service.Close(); } } /// <summary> /// 停止服務 /// </summary> /// <param name="serviceName">服務名</param> private void StopService(string serviceName) { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped); service.Close(); } } /// <summary> /// 重啟服務 /// </summary> /// <param name="serviceName">服務名</param> private void ResetService(string serviceName) { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running || service.Status == ServiceControllerStatus.Stopped) { service.Stop(); service.WaitForStatus(ServiceControllerStatus.Stopped); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running); service.Close(); } }

代碼很簡單,一看簡單明了,呵呵…

開發注意事項:

1、如果用VS偵錯工具對服務進行停止、啟動等操作的時候,報

解決辦法:關閉VS,用管理員身份運行程式即可解決問題

 

2、將網頁部署到IIS進行訪問的時候,可能提示沒許可權操作等原因:

首先還是介紹下IIS的安裝吧,估計大家對這個都沒問題了

控制台--->程式和功能--->啟用或關閉Windows功能--->Internet資訊服務,如:

由於我用的是Win8,最開始我只勾選了一級目錄,就點擊安裝了,結果運行IIS網站的時候,總是提示403錯誤,後來才發現是IIS安裝不全的問題,請根據勾選即可。

當IIS安裝完全之後,網站可以運行了,但是在操作服務的時候提示許可權不足原因,請在IIS設定如下:

我這裡是DefaultAppPool程式池,滑鼠右擊該程式池-->進階設定,如下如:

 

 

標識這裡選擇內建賬戶為:LocalSystem,或者選擇自訂賬戶,建立一個有許可權的帳號也可以。

再次運行網站,對我們的服務進行停止、啟動等操作,發現一切正常。

以上就是今天在做有關網頁對服務進行操作說遇到的問題,希望能幫到有同樣需求的人。

如何在網頁啟動Windows服務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.