2010-04-23 52 views
2

我寫了一個C#Windows服務來處理我們的應用程序的任務調度。我試圖將「業務規則」程序集移動到日程安排應用程序的bin子目錄中,以便我們更容易地執行更新(停止服務,刪除bin文件夾中的所有文件,替換新文件,啓動服務)。C#Windows服務似乎不喜歡privatePath

我加

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath="bin;"/> 
    </assemblyBinding> 
</runtime> 

到該服務的應用程序配置,如果該服務運行作爲控制檯應用程序,它工作正常。問題是服務作爲Windows服務運行時不起作用。看來,當Windows運行服務的應用程序配置文件被正確讀取,然後執行該服務,就好像它在c:\ windows \ system32中,而不是實際的EXE位置,並且膠粘了作品。

我們有很多程序集,所以我真的不想使用GAC或<codeBase>。當它作爲服務運行時,是否有可能讓EXE將其基目錄更改回它應該在的位置?

+0

如果您將DLL放在與EXE相同的文件夾中,它會工作嗎?那麼代碼庫是好的。我沒有看到''元素,是嗎?使用fuslogvw.exe解決解決問題。 – 2010-04-23 18:27:46

+0

是的,當EXE作爲服務運行並且程序集與EXE位於同一文件夾時,一切正常。是的,配置文件具有<配置>(實際配置更長,這就是爲什麼我沒有發佈整個事情)。我會給fuslogvw.exe一個鏡頭。 – c17r 2010-04-24 16:17:02

回答

1

原來我錯了。即使從Windows服務,privatePath也能正常工作。問題是我已將<runtime>部分添加到app.config的頂部,因爲<configSections>不是文件中的第一項,所以會引發錯誤。然而,該服務仍然表示它開始正常(我們必須解決的問題),並且用於啓動錯誤的日誌文件正被寫入除EXE文件夾之外的目錄(我們必須修復的東西) <runtime>阻止它在app.config中的正確位置,所有操作都完美無缺。

對fuslogvw.exe的評論的榮譽,如果可以,我會給你答案。它讓我看到privatePath正在被跟蹤,並且錯誤在其他地方。

+0

您的回答讓我放心,我可以將其與我的TopShelf服務配合使用。在我的情況下,我從網上某處複製並粘貼了一個不正確的xmlns。謝謝! – twamley 2013-05-16 22:32:59

0

使用完全限定的路徑。如果您在作爲服務運行時沒有完全限定它,那麼您在system32中尋找bin是正確的。

+1

我不認爲你可以用privatePath做一個完全合格的路徑,它必須是EXE目錄的子目錄。或者我的知識過時了? – c17r 2010-04-23 18:04:55

+1

Duh。忘了那個。忽略我不正確的答案! – 2010-04-23 18:08:18