Windows 服務應用程序介紹 Microsoft Windows 服務(即
以前的 NT 服務)使您能夠創建在它們自己的 Windows 會話中可長時間運行的可執行應用程序
這些服務可以在計算機啟動時自動啟動
可以暫停和重新啟動而且不顯示任何用戶界面
這使服務非常適合在服務器上使用
或任何時候
為了不影響在同一台計算機上工作的其他用戶
需要長時間運行功能時使用
還可以在不同於登錄用戶的特定用戶帳戶或默認計算機帳戶的安全上下文中運行服務
創建 Windows 服務 當創建服務時
可以使用稱作 Windows 服務的 Visual Studio
NET 項目模板
此模板引用適當的類和命名空間
設置從服務基類的繼承並重寫您可能要重寫的幾種方法
從而自動為您完成大部分工作
若要創建功能性服務
必須至少
設置 ServiceName 屬性 為服務應用程序創建必需的安裝程序
重寫 OnStart 和 OnStop 方法並為其指定代碼以自定義服務的行為方式
在將安裝程序添加到應用程序之後
下一步是創建安裝項目
該項目將安裝已編譯的項目文件並運行安裝服務所需的安裝程序
若要創建完整的安裝項目
您必須將服務項目的輸出添加到該安裝項目
然後添加自定義操作以安裝您的服務
創建一個 Windows 服務項目 在
屬性
窗口中
設置服務的 ServiceName 屬性
(注意 ServiceName 屬性的值必須始終與安裝程序類中記錄的名稱匹配
如果更改此屬性
還必須更新安裝程序類中的 ServiceName 屬性
)
設置下列所有屬性以確定服務的工作機制
屬性 設置
CanStop True 表示服務將接受停止運行的請求
false 表示禁止服務停止
CanShutDown True 表示服務希望在運行它的計算機關閉時收到通知
以便能夠調用 OnShutDown 過程
CanPauseAndContinue True 表示服務將接受暫停或繼續運行的請求
false 表示禁止服務暫停和繼續
CanHandlePowerEvent True 表示該服務可以處理有關計算機電源狀態更改的通知
false 表示禁止服務得到有關這些更改的通知
AutoLog True 表示在服務執行操作時將信息項寫入應用程序的事件日志
false 表示禁用此功能
(注意 默認為 true
)
注意 當 CanStop 或 CanPauseandContinue 設置為 false 時
服務控制管理器將禁用停止
暫停或繼續服務的相應菜單選項
訪問代碼編輯器
並為 OnStart 和 OnStop 過程填寫所需的處理
重寫其他所有要為其定義功能的方法
添加服務應用程序所必需的安裝程序
通過從
生成
菜單中選擇
生成解決方案
來生成項目
(注意 不要通過按 F
鍵來運行項目
不能以這種方式運行服務項目
)
實例
新建一個名為MyService的Windows服務項目
將Service
cs及代碼裡的類名改為你想要的名字
我這裡統一用MyService
using System
Threading;
一個後台服務線程
private Thread backThread=null;
在構造函數裡實例化線程
this
backThread=new Thread(new ThreadStart(this
Running));
在類裡添加private void Running(){}方法
一般要讓線程一直處於運行狀態來處理你給它安排的工作
例如根據消息隊列裡的消息
執行下載任務下載文件
private void Running()
{
while(true)
{
//你的處理
Thread
Sleep(
*
);//例如讓線程休眠
秒
}
}
重寫線程的控制函數
protected override void OnStart(string[] args)
{
this
backThread
Start();
}
protected override void OnStop()
{
this
backThread
Abort();
}
protected override void OnPause()
{
this
backThread
Suspend();
}
protected override void OnContinue()
{
this
backThread
Resume();
}
同時你也可以根據需要按照上面表格所列的屬性進行設置
在該項目上點右鍵選擇添加-添加類-安裝程序類
取名Install
cs
在Install
cs的視圖設計器裡為它添加ServiceInstall和ServiceProcessInstall控件
可以為這
個控件設置屬性
例如可以在ServiceInstall的ServiceDependedOn屬性裡設置服務依賴
生成解決方案
下面介紹如何安裝服務
安裝和卸載服務
手動安裝服務
訪問項目中的已編譯可執行文件所在的目錄
用項目的輸出作為參數
從命令行運行 InstallUtil
exe
在命令行中輸入下列代碼
installutil yourproject
exe
手動卸載服務
用項目的輸出作為參數
從命令行運行 InstallUtil
exe
在命令行中輸入下列代碼
installutil /u yourproject
exe
調試 Windows 服務應用程序 由於服務必須從服務控制管理器的上下文中運行
而不是從 Visual Studio
NET 中運行
因此調試服務不像調試其他 Visual Studio 應用程序類型那樣簡單
若要調試服務
必須首先啟動服務
然後將一個調試器附加到正在運行服務的進程中
然後可以使用 Visual Studio 的所有標准調試功能來調試應用程序
警告 除非知道進程是什麼
並且知道附加到進程或可能會取消進程所帶來的後果
否則不要附加到進程
例如
如果附加到 WinLogon 進程
然後停止調試
系統就會暫停
因為沒有 WinLogon
系統無法運行
只能將調試器附加到正在運行的服務
附加進程會中斷服務的當前運行
它並不真正終止或暫停服務的處理
也就是說
如果開始調試時服務正在運行
則在進行調試時
該服務從技術上說仍處於
已啟動
狀態
但它的處理已掛起
附加到服務的進程使您能夠調試大多數服務代碼
但並非全部
例如
由於服務已經啟動
因此不能用這種方法調試服務的 OnStart 方法中的代碼
或調試用於加載服務的 Main 方法中的代碼
解決此問題的一個方法是
在唯一作用是幫助調試的服務應用程序中創建一個臨時服務
可以將兩個服務都安裝上
然後啟動此
虛擬
服務加載服務進程
臨時服務啟動了進程後
就可以使用 Visual Studio
NET 中的
調試
菜單來附加到服務進程
當附加該進程之後
可以設置斷點並使用這些斷點來調試代碼
當退出用於附加到該進程的對話框時
實際上已處於調試模式
您可以使用服務控制管理器開始
停止
暫停和繼續您的服務
因此命中已設置的斷點
調試成功後
移除此
虛擬
服務
注意 調試 OnStart 方法可能比較困難
因為 Windows 服務管理器將所有嘗試啟動服務的時間限制在
秒內
當調試 Windows 服務應用程序時
服務與
Windows 服務管理器
進行交互
服務管理器
通過調用 OnStart 方法啟動服務
然後花
秒時間等待 OnStart 方法返回
如果在這段時間內方法沒有返回
管理器將顯示一個服務無法啟動的錯誤
如果在 OnStart 方法中放置一個斷點並且在
秒內不通過該斷點
則管理器不會啟動服務
調試服務 安裝您的服務
可從服務控制管理器
服務器資源管理器
或代碼啟動服務
在 Visual Studio 中
從
調試
菜單中選擇
進程
出現
進程
對話框
單擊
顯示系統進程
在
可用進程
區域內單擊服務的進程
然後單擊
附加
(提示 此進程將與服務的可執行文件同名
)出現
附加到進程
對話框
選擇任意適當選項
然後單擊
確定
關閉對話框
(注意 您現在已處於調試模式
)
設置要在代碼中使用的任意斷點
訪問服務控制管理器並操縱您的服務
並發送停止
暫停和繼續命令以命中您的斷點
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25932.html