個人認為寫Windows Service與寫一般Windows應用程式最大的不同在偵錯技巧及系統服務的安裝與設定,如果能夠掌握以上的兩個關鍵,那麼寫起來就如魚得水優游自若囉!


首先讓我們新增一個專案,取名為SampleService

使用Visual Studio(C#)撰寫Windows Service

 

接著我們應該會看到這樣的畫面

圖片2.JPG

 

嘿嘿!看起來是很熟悉的面孔,我個性一向很急躁,跑跑看吧!很不幸的,出現了以下的畫面

圖片5.JPG    


什麼??Windows服務啟動錯誤??
---------------------------
Windows 服務啟動錯誤
---------------------------
無法從命令列或偵錯工具啟動服務。必須先安裝 Windows Service (使用 installutil.exe) 然後搭配 ServerExplorer、Windows 服務管理工具或 NET START 命令啟動。

每個字都是中文,拼湊起來真是有看沒有懂,不過沒關係,有困難就要客服,先識別關鍵字:

1.installutil.exe <= 這個看起來很重要

2.ServerExplorer、Windows服務管理工具或NET START命令啟動  <= 這應該代表是三選一

installutil.exe看起來怎麼都像是Command Line應用程式,好,那他應該可以在Visual Studio命令提示字元呼叫,來試試!Bingo!

圖片6.JPG  

 

看看用法先

圖片3.JPG

 

看來應該是要把這個專案產出的assembly安裝成服務,試試看!

圖片7.JPG  

 

哇!哇!組件中找不到具有 RunInstallerAttribute.Yes 屬性的公用安裝程式,這又是甚麼東西?看起來安裝是失敗了,果然有意外方人生呀,依據上面的線索,我們開啟log檔看看吧!log在assembly所在目錄

圖片9.JPG  

圖片8.JPG  

 

由於找不到安裝程式,所以必須移除 InstallState 檔案,Google最好用了!我不懂時都問它,搜尋一下,原來是少了安裝程式(啊人家訊息不是有講??)

好吧!請你們跟我一起這樣做!

圖片10.JPG  

 

這時會多出ProjectInstaller.cs、serviceProcessInstaller1及serviceInstaller1等安裝時需要的程式

圖片4.JPG

 

重新建置後再試一次,喔耶!設定服務登入(對Windows服務有點瞭解的人都知道每個服務都需要一個執行的身分),看來是成功了,不過根據經驗,建議本機使用者要加".\"以避免不必要的問題,讓我們輸入適當的帳號密碼吧!

圖片12.JPG

 

按下確定後看到成功的提示了

圖片13.JPG

 

進到服務管理員,嘿嘿,Service1跑出來了唷!登入身分跟我們剛剛輸入的一致,試著啟動也行耶!讚啦!水啦!管他維大力還義大利

圖片17.JPG  

 

再來總要搞些花樣吧!這樣大家才知道原來我們是會寫程式的,最會寫的就是try catch了,哈哈!

圖片15.JPG

圖片24.JPG  

 

寫完了那就建置吧!

又發生錯誤了!"拒絕存取路徑"或"由於另一個處理序正在使用檔案",不過如果看到這個錯誤也不要心驚驚,那是因為服務現在正在執行,所以檔案蓋不過去,先去把服務停了就OK囉

圖片18.JPG

 

啟動後,看看Log,哇!那ㄟ安捏跑到catch去了,不過實戰時最常遇到的就是這種情形了,該跑的跑不到,不該跑到的一個也沒少,唉!人生呀!

圖片25.JPG

 

這時候就是要會Debug了,沒關係,我們今天也是有安排的,老師上個禮拜就跟我們會員報告了,個股裡面這個本益比相對較低的,老師有沒有說會員可以用力買進,有沒有?有聽老師分析的會員現在是不是笑得合不攏嘴、荷包滿得要丟掉身份證才放得下鈔票呀!離題了,抱歉!
正常的情況下,我們可以用偵錯->附加至處理序這樣的方式來偵錯

圖片26.JPG

圖片27.JPG

 

如下圖,在OnStop()下中斷,然後去停止服務,會觸發OnStop(),這時就能夠進行偵錯

圖片28.JPG

 

圖片29.JPG   

 

但若要偵錯OnStart()呢?服務還沒啟動前不會有處理序可以附加,啟動後就代表OnStart已經跑完

沒關係,我們還有這招Debugger.Launch();

使用Visual Studio(C#)撰寫Windows Service

 

服務啟動時執行到Debugger.Launch();這行就會帶出偵錯工具,如下圖

圖片31.JPG

 

按了F10就可以進行偵錯了

圖片32.JPG  

 

其它的就讓大家自由發揮囉 :)

arrow
arrow
    創作者介紹
    創作者 慢飛 的頭像
    慢飛

    腦容量太小

    慢飛 發表在 痞客邦 留言(5) 人氣()