2010-09-21 64 views
1

我創建了一個使用FileSystemWatcher監視目錄的Windows服務,並且當文件被放入該文件夾時,它將其壓縮。Windows Service在測試時工作,但不在服務中工作

所有功能都在我創建的名爲FileProcessor的類中。

當我創建一個使用FileProcessor的控制檯應用程序時,自動壓縮效果很好。但是,當我在Windows服務中運行該類時,它永遠不會運行。

+5

你試過調試你的服務嗎? 「它永遠不會工作」有點模糊。 IIRC,將Debugger.Break()行放在正確的位置可以作爲Debug版本的一部分。 – spender 2010-09-21 20:05:20

+1

我同意spender,並且我可以確認當在具有本地管理員權限的帳戶(以及本地目錄)上運行時,FileSystemWatcher可以很好地從服務中運行。 – 2010-09-21 20:09:08

回答

3

檢查您的服務正在運行的帳戶和目錄 - 它是否具有目標目錄的權限和可見性?

向該類添加一些診斷信息,以便您可以看到它正在嘗試執行的操作,並輸出錯誤信息(您正在處理任何可能的操作系統錯誤,在FileSystemWatcher下,對不對?)。無論如何,當服務上線時你會需要這些。比較運行時作爲服務的輸出與測試中的輸出。

System.Threading.Thread.Sleep(15000)添加到您的課程中,以便在您的服務調用該課程時,您有時間附加調試器以確定發生了什麼。

+0

+1好老的Thread.Sleep([許多秒])技巧。更好的時候,一旦你解決了這個問題,然後你就可以釋放這個問題了,而且再也找不到時間去重新解決問題了! – 2010-09-21 20:11:55

+0

@Andras Zoltan - 通常我只將它放在Debug版本中以防止尷尬 – 2010-09-21 20:15:08

+0

或者,您可以讓它執行'Debugger.Break'(http://msdn.microsoft.com/zh-cn/library/system.diagnostics .debugger.break.aspx),它會提示你附加到它。您還需要確保允許它與桌面進行交互。 – 2010-09-21 20:18:30

5

對我來說聽起來像文件的權限可能會把你搞砸。服務運行在哪個帳戶下?

0

嘗試調試你的服務,因爲spender說 - 運行服務。在代碼中放置一個調試點來檢查。在Visual Studio中按Ctrl + Alt + P,這會給你附加的過程畫面。

簽入 - 在所有用戶中顯示進程並在所有會話中顯示進程 - 複選框。 試圖找到你的服務 - 可用進程列表 ,然後單擊「連接」

現在把一個文件夾中,然後調試器會帶你到VS在斷點處,並嘗試調試它我確定你會發現什麼問題是。

相關問題