windows服務

什麼是windows服務?

     一個Windows服務程序是在Windows操作系統下能完成特定功能的可執行的應用程序。Windows服務程序雖然是可執行的,但是它不像一般的可執行文件通過雙擊就能開始運行了,它必須有特定的啓動方式。這些啓動方式包括了自動啓動和手動啓動兩種。對於自動啓動的Windows服務程序,它們在 Windows啓動或是重啓之後用戶登錄之前就開始執行了。只要你將相應的Windows服務程序註冊到服務控制管理器(Service Control Manager)中,並將其啓動類別設爲自動啓動就行了。而對於手動啓動的Windows服務程序,你可以通過命令行工具的NET START 命令來啓動它,或是通過控制面板中管理工具下的服務一項來啓動相應的Windows服務程序(見圖1)。同樣,一個Windows服務程序也不能像一般的應用程序那樣被終止。因爲Windows服務程序一般是沒有用戶界面的,所以你也要通過命令行工具或是下面圖中的工具來停止它,或是在系統關閉時使得 Windows服務程序自動停止。因爲Windows服務程序沒有用戶界面,所以基於用戶界面的API函數對其是沒有多大的意義。爲了能使一個 Windows服務程序能夠正常並有效的在系統環境下工作,程序員必須實現一系列的方法來完成其服務功能。Windows服務程序的應用範圍很廣,典型的 Windows服務程序包含了硬件控制、應用程序監視、系統級應用、診斷、報告、Web和文件系統服務等功能。

    由於項目需求需要用windows服務做計劃任務類似功能的東東.

    和 本人的另一篇博文ASP.NET 計劃任務(不使用外接程序,.net內部機制實現) 有點類似. 也是通過時間控件 定時檢測實現執行任務的.

廢話不多進入正題:

windows服務打開: 計算機桌面==>開始菜單==>程序==>管理工具==>服務 {如下圖}

image

下面介紹使用VS2010(C#)編寫windows應用程序的方法(VS2008,2005也類似).

1. 新建windows服務項目

打開vs2010 最上方的工具欄: 文件==> 新建==>項目

image

2. 程序說明

建好之後再解決方案中將有{如下圖的文件}

image

雙擊進入設計見面;

按F7 或者 右鍵可查看代碼;

主要方法: 如下圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//啓動服務時執行
protected override void OnStart(string[] args)
{
}
//停止服務時執行
protected override void OnStop()
{
}
//暫停服務時執行
protected override void OnPause()
{
}
//繼續服務時執行
protected override void OnContinue()
{
}

以上4個事件對應的服務事件

image

隨便點一條服務.

image

上圖打方框的4個按鈕 就對應着上面程序的4個方法. 別說你不明白哪個按鈕對應哪個方法, 反正我是不信這4個你都不知道怎麼對應.

3. 實現我們的計劃任務(此處以計劃任務爲例子,你也可以依葫蘆畫瓢的實現其他監控之類的功能).

首先我們雙擊 Service1.cs 進入設計界面 拖一個時間控件過來

image

屬性默認

但是要添加事件

image

爲事件添加代碼, 實現計劃任務功能.

1
2
3
4
5
6
7
//此方法間隔一定時間就會運行一次
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    this.timer1.Enabled = false;
    //在此添加您們需要的功能代碼, 我在此添加檢測計劃是否需要執行
    this.timer1.Enabled = true;
}

添加服務啓動事件方法時時間控件方法 生效

1
2
3
4
5
6
7
protected override void OnStart(string[] args)
{
    // TODO: 在此處添加代碼以啓動服務。
    //使時間控件生效 並且1秒鐘調用一次timer1_Elapsed() 方法
    this.timer1.Interval = 10000;
    this.timer1.Enabled = true;
}

停止,暫停,恢復方法的內容類似 就是控制timer1的生效或者失效即可;

到此簡單的windows服務功能就完成了. 有什麼感觸呢?

哈哈我想你照着做發現 F5不能用了吧?

是的windows 服務普通的按F5 是不能進行調試的. 需要啓動服務然後附加進程之後纔可以.

方法一: 網上很多關於啓動服務的方法 比如使用

image

此種方法簡化版本就是寫批處理. 網上一搜一大堆. 就不介紹了 如果實在不明白的 可以私下聯繫.

方法二:

在Service1.cs 進入設計界面右擊 點擊添加安裝程序.

image

是否發現多了個文件[ProjectInstaller.cs]?

雙擊文件

image

第一個: serviceProcessInstaller1 打框框的屬性一定要如下設置, 主要就是權限問題.其他的屬性大家自己看着設置吧.

image

接着右擊解決方案, 添加安裝項目

image

在項目輸出上設置輸出組 將您自己的服務設爲主輸出

image

image

接着生成 服務項目 和安裝項目

image

右擊安裝項目點擊安裝即可安裝服務

image

如果您修改了服務項目內容 請重新生成 服務項目 和安裝項目再點擊安裝即可.

服務已經安裝, 接着您要到計算機服務管理裏面將服務啓用

image

這樣就大功告成了!

接着說說調試. 調試需要在服務啓用之後

然後:通過附加進程來實現調試

image

找到您自己的服務 附加

image

即可進行調試.

源代碼因爲是公司的項目代碼在其中就不上傳了.

希望大家一起進步!

由於某些細節沒有寫明白有些同學不明白. 特地附加上.

1. 服務不能安裝和卸載

在安裝程序項目中需添加自定義操作

image

image

image

選擇您自己的項目文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章