編寫Windows Service 備忘

項目需求要作一個定時掃表,將按條件查詢到的數據插入或者更新到另外一個數據表的需求,老大要求讓用window service來作html

由於之前沒有作過,把此次的經歷寫出來.做爲備忘.數據庫

1.什麼是windows服務windows

如下部份內容來自http://www.cnblogs.com/salomon/archive/2012/05/21/2511643.html安全

Windows服務,微軟的官方定義是這樣的:Microsoft Windows 服務(即之前的 NT 服務)使您可以建立在它們本身的 Windows 會話中可長時間運行的服務器

可執行應用程序。這些服務能夠在計算機啓動時自動啓動,能夠暫停和從新啓動並且不顯示任何用戶界面。這些功能使服務很是適合在服務器上使用,每當函數

須要使用不會影響在同一臺計算機上工做的其餘用戶的功能時也適用。還能夠在不一樣於登陸用戶的特定用戶賬戶或默認計算機賬戶的安全上下文中運行服務。   測試

這種描述過於抽象並且籠統。那麼究竟什麼是服務呢?首先Windows服務和普通應用同樣是是一個應用程序,一個後臺進程。但它又十分特殊,特殊在以spa

下幾點:  設計

  1.它一般在系統啓動時用戶登陸Windows以前由NET kernel中的SCM(Service Control manager)加載,並通常在系統啓動時自動開啓的。  3d

  2.Windows服務獨立於特定用戶之上,也就是說它能夠被一臺計算機上任何用戶所共用。   

若是一個應用須要長時間的後臺運行,而且獨立於某個特定用戶控制檯,咱們能夠考慮把它寫成Windows服務。它一般沒有界面(沒有硬性限制,能夠編

寫有界面的Windows服務),一般隨機啓動,隨機關閉而關閉,但也能夠隨用戶須要手動啓動,通常兩種方法:1 Control Panel -> Administrative Tools

-> Services  2,由其它程序調用SCM提供的接口開啓。相似於Windows服務東西好比UNIX的daemons,Dos下的運行於AUTOEXEC.BAT或者 CONFIG.SYS的TSR。常見的服務包括硬件驅動(打印機等),FTP服務,數據庫服務,WEB服務等等。

2.編寫

2.1 首先建立windows服務項目

如圖,咱們在建立項目的時候選擇windows 服務項目.來進行建立

2.2編寫業務邏輯代碼

咱們也能夠將服務類 進行重命名. 這裏的OnStart方法在服務啓動的時候調用,

因此咱們能夠將業務邏輯寫在這裏.建議封裝一個類和方法來封裝業務邏輯操做,而後在這裏調用該類的方法

OnStop方法在服務中止的時候調用,咱們在這裏能夠寫一些處理邏輯

3.設置服務名稱和登陸權限

在  服務的 的設計界面 右鍵-添加安裝程序.會添加一個ProjectInstaller.cs 類.

這裏咱們須要注意兩件事.

A.爲設計界面中 serviceInstaller1 控件設置服務的啓動類型

Automatic--自動啓動

Manual--手動啓動

B.設置服務啓動登陸權限

這裏咱們選擇 以本地系統的權限來啓動.

4.安裝服務

windows 服務 微軟提供了自帶的安裝程序 InstallUtil.exe

以管理員身份運行該程序,而後安裝 你編譯好的服務

cmd 會提醒你服務是否安裝成功

5.查看服務狀態

5.刪除服務

咱們在調試過程當中,可能須要刪除服務,而後修改代碼.而後從新安裝服務,再次調試.

注意,必須先刪除服務 否者生成失敗.

注意,刪除服務以前必須先中止服務.不然刪除失敗.

建議開兩個 CMD不要關閉 一個安裝 一個刪除,

6.進行服務調試

發開的時候咱們要測試業務邏輯和咱們預期的是否一致,可是調試服務又很麻煩.

咱們能夠在Program.cs

 static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new Service1() 
            };
            ServiceBase.Run(ServicesToRun);
        }

 在這裏調用你的業務類.new 出來直接調用

下面的註釋掉.

Main函數也是這個服務啓動的入口.

咱們將服務安裝到本機而且啓動以後,也能夠以附加到進程的方式調試服務運行

相關文章
相關標籤/搜索