2013-12-18 31 views
0

我有一個C#服務應用程序引用了一個dll('A'),該引用又引用了其他dll('B'和'C')。服務項目引用所有必需的dll。服務找不到引用的DLL

入口代碼調用'A'中調用'B'或'C'中方法的方法。我們收到'A'的自定義錯誤消息,說'B'和'C'找不到,儘管他們與服務在同一個文件夾中,我們知道這表明進程正在工作文件夾不正確(即進程認爲工作文件夾在別處)。

問題是:我如何明確告訴服務工作文件夾是什麼?

TIA

+1

你如何主辦服務? – nvoigt

回答

3

Services run in System32

如果將B.dll和C.dll複製到System32文件夾中,它可能會工作。

要解決這個問題,您應該在解決方案中創建一個安裝程序項目。安裝程序將處理所有必要的.dll在正確的位置安裝。

Here's a SO example

編輯#1:

This post擁有的最後一塊拼圖。必須將Dll與原始項目分開添加到安裝項目中。

+0

我應該提到 - 我有一個安裝程序和一個安裝和部署項目,用於安裝服務,而dll實際上位於服務可執行文件夾中。但它似乎仍然不知道在哪裏尋找它們。 –

+0

@NeilHaughton編輯了我的帖子。我無法在我的機器上測試它,但它看起來像必須手動將.dlls添加到安裝項目(它不會自動執行)。讓我知道這是否有幫助。 – Shaz

+0

沒有。我已經這樣做了,並且檢查了dll實際上與安裝的服務存在於同一個文件夾中。它仍然報告它找不到它們。我真的不想將所有這些DLL複製到System32目錄中 - 它們在那裏沒有業務,屬於我的應用程序而不是「共享」庫。關鍵是我必須欺騙服務,認爲工作文件夾是服務可執行文件所在的位置,我可以在代碼中輕鬆完成。 –

1

事實證明,我不得不愚弄服務來認爲工作文件夾是服務可執行文件所在的位置,現在我可以在代碼中輕鬆完成這些工作,這要感謝上面的一些鏈接。