2011-09-23 87 views
2

我使用C#創建了一個Windows服務,該服務在C:\ProgramData中寫入日誌(使用NLog)。
當我調試服務(在我的Windows 7上)(使用上面寫的代碼)時,日誌文件被正確創建並正確寫入日誌記錄。 但是,當我在我的服務器上安裝Windows服務器2008上運行的服務(x86)時,沒有創建日誌文件(我也檢查了C:\Windows\System32\,沒有任何內容)。在日誌文件中寫入Windows服務權限

我懷疑這是一個授權問題,所以我怎麼知道我的服務使用哪些權限?

PS:我已經使用具有管理員權限的命令行C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe C:\PathToMyService\MyService.exe安裝了我的服務。

+1

權利將是您的服務運行的任何身份,而不是用於安裝它的身份。詳情請看這裏:http://stackoverflow.com/questions/858597/why-wont-my-windows-service-write-to-my-log-file –

+0

C:\ windows \ system32不應該被用來寫日誌文件到。這是一個重要的操作系統目錄。另外C:\ ProgramData我們是應用程序二進制文件駐留,不應該用於日誌文件。您應該將應用程序服務的日誌文件寫入C:\ AppData \ local \ ...或Windows 2008服務器上的Windows事件日誌。如果你這樣做的話,你的權限問題也會減少,除此之外,這也是很好的做法。 –

回答

5

運行services.msc,找到您的服務請點擊右鍵並選擇Properties。檢查Log On選項卡以查看您的服務在哪個帳戶下運行。

至於你的問題,默認情況下,我認爲大多數服務運行在Local System Account,我假設有權寫入C:\ProgramData目錄。你確定nlog.config文件是與你的服務一起部署的嗎?

+1

Arg,剛纔發現nlog.config文件沒有與我的服務一起部署。固定! – Otiel

+0

@Leito - 你的問題聽起來很熟悉......發生在我身上好幾次! – James

+0

如何確保NLog.config文件與服務一起部署?是否「總是複製到輸出文件夾」足夠? –

1

您應該在Windows控制面板fpr服務中看到您的服務。在上下文菜單中,您可以看到運行服務的用戶。您甚至可以更改在那裏運行您的服務的用戶。

您必須授予該用戶寫入日誌目錄的權利。