2012-12-21 79 views
3

我對Windows服務和線程有點新,所以我希望我不會在這裏犯一個明顯的錯誤。我有一個應用程序,用於在C#中運行各種網絡維護類型活動。該應用程序在我的本地機器上完美工作,我決定我希望它作爲一個Windows服務運行,所以使用相同的代碼進行了適當的更改,並再次在我的本地機器上工作。Windows服務不執行代碼

當我通過網絡上的服務器端口時,出現了問題。非Windows服務代碼再次運行良好並按預期運行。然而,Windows服務代碼似乎什麼都不做。該進程安裝正常,並開始/停止罰款,但沒有任何代碼似乎正在執行,任何幫助調試Visual Studio中的Windows服務也將不勝感激。這是我的OnStart過程中的代碼,似乎沒有執行。

 smThread = new Thread(delegate() { sm.RunServerMonitor(ref run); }); 
     smThread.Start(); 

     dailyThread = new Thread(delegate() { dailyEvents(); }); 
     dailyThread.Start(); 

由於非Windows服務代碼的工作,我不相信我遇到的權限類型的問題,除非有需要進行設置,以使服務能夠遠程執行任務,比我需要不同的權限爲簡單的C#代碼做同樣的事情。

謝謝, 馬特

+1

你能告訴我們你用來連接服務的代碼嗎?當你說windows服務時,你的意思是一個WCF服務? –

+0

它可能是許可問題。運行服務的帳戶是什麼?您的桌面應用程序可以以管理員身份運行,該服務可以作爲不具有權限的另一個運行。 – urlreader

+0

如果您運行的是WCF Web服務,則可能需要更改應用程序池帳戶設置。默認的IIS_IUSR帳戶沒有很多權限。你運行WCF嗎? –

回答

3

感謝您的評論,問題是權限相關的。當我點擊該服務並在「登錄」選項卡下,並將該帳戶更改爲具有管理權限的帳戶並且工作正常。謝謝大家對你的幫助,非常感謝。

2

添加以下行作爲第一行代碼的OnStart方法內部

while(!System.Diagnostics.Debugger.IsAttached) 
{ 
    System.Threading.Thread.Sleep(100); 
} 

smThread = new Thread(delegate() { sm.RunServerMonitor(ref run); }); 
smThread.Start(); 

dailyThread = new Thread(delegate() { dailyEvents(); }); 
dailyThread.Start(); 

您可以while循環後成立的代碼中的斷點在下一行並開始服務。然後,從Visual Studio中,附加到服務進程進行調試。

+0

好我會試試這個謝謝! – mgrenier