windows Service 之除錯過程

2022-08-02 08:00:08 字數 2942 閱讀 9804

最近第一次用c#寫了乙個windows service ,其實實現的內容比較簡單。就是啟動remoting 連線,但是除錯相對初次寫windws service 的我來說,比較煩。沒有經驗,而且沒辦法像除錯其他windows 程式一樣設定斷點,無法看到執行過程。經過檢視一些相關資料後,有了一點點除錯的心得。特此留筆,以待今後使用。

相關原始碼:

static

void

main();//

servicestorun 

=new

servicebase ;

servicebase.run(servicestorun);

//teamworldservice obj = new teamworldservice();

}teamworldservice :

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.data;

using

system.diagnostics;

using

system.serviceprocess;

using

system.text;

using

system.io;

using

tribal.teamworld.api;

using

tribal.baseclasses;

using

tribal.teamworld.remoting;

using

tribal.teamworld.implementation;

namespace

tribal.teamworld.service

protected

override

void

onstart(

string

args)

catch

(exception ex)if(

this

._maincontroller 

!=null

)try

catch

(exception exc)

trycatch

(exception exc)

}protected

override

void

onstop()

private

void

printexceptions(exception exc)

}private

void

addtextline(

string

line)

catch

(exception ex)}}

}方法1:寫日誌

是最傳統的除錯windows service方法,也是大家在除錯service 比較管用的方式,但是,除錯起來還是不太明朗。你要在你認為可能出現錯誤的地方全部新增寫日誌的方法。我上面的**就採用了addtextline 函式實現的這種方法。

方法2:附加程序

附加程序的方法可以像除錯正常的widows程式一樣,設定斷點進行單步除錯。但是,我必須在安裝啟動服務後,才可以進行附加此服務程序,可在附加的同時onstart 函式已經執行完畢,所以對onstart 無法除錯。但是我可以通過設定啟動服務延時來載入除錯。

步驟如下:

1,設定啟動服務延時,

private

system.timers.timer timerdelay;

protected

override

void

onstart(

string

args)

catch

(exception ex)

}void

timerdelay_elapsed(

object

sender, system.timers.elapsedeventargs e)

注意:正常服務的啟動時間為30秒左右,當服務啟動時間超過30秒會報錯!,所以不要在onstart中做過多的操作,也可以用這種延時的方法啟動服務,以防在啟動服務時超時。

2、首先要對服務進行安裝,然後啟動服務。

3、開啟vs2005  除錯—>附加到程序,選擇你的服務程序(如果找不到可以勾選 顯示所有使用者的程序),就可以了。

方法3:

我認為是這次除錯對我幫助最大。

在main 函式中,注釋掉原有自動生成的**,注意紅字部分是要根據自己的服務名字來手工新增的

// servicebase servicestorun;

//同一程序中可以執行多個使用者服務。若要將

//另乙個服務新增到此程序中,請更改下行以

//建立另乙個服務物件。例如,

////

servicestorun = new servicebase ;

////servicestorun 

=new

servicebase ;

//******************************************

teamworldservice obj = new teamworldservice();

obj.onstart();

//******************************************

然後把 protected

override

void

onstart(

string

args) 改為 public

void

onstart(

)。,設定你的斷點,按 f5 執行就可以除錯了。

以上是自己這次除錯widows service 後,得到的一些方法。以待今後繼續積累。

windows Service 之除錯過程

最近第一次用c 寫了乙個windows service 其實實現的內容比較簡單。就是啟動remoting 連線,但是除錯相對初次寫windws service 的我來說,比較煩。沒有經驗,而且沒辦法像除錯其他windows 程式一樣設定斷點,無法看到執行過程。經過檢視一些相關資料後,有了一點點除錯的...

windowsservice建立心得

1,新建乙個windows服務為 filetranceservice,2,新增timer,該timer是 system.timers,注意 看看這個 timer 控制項的屬性中的命名空間是什麼 如果是 system.timers.timer 那就對了 如果是 system.windows.froms...

Windows Service學習筆記

windows服務程式是windows作業系統下能完成特定功能的可執行程式。它適合需要長時間執行的功能使用。建立完成後,看到如下圖所示 將service1的名稱改成你需要的名稱,例如 helloservice 修改安裝服務名稱 修改安裝許可權 完成上面的步驟後,就可以開始我們的程式啦。主要使用到on...