2012-03-30 35 views
0

我有一個Windows服務必須使用網絡驅動器上的dll文件。當我連接到這個網絡驅動器時,我添加了這個dll作爲我的Windows服務的參考。通過添加此dll文件自動創建2個以上的參考文件。這個服務上有一個代碼,它只是從dll創建一個類的實例。當我在Visual Studio 2010上調試此代碼時,當我按F10(跳過)時,它會引發異常:Windows服務和Dll在網絡驅動器

「檢索具有CLSID的組件的COM類工廠{65EB3876-89FF-459F-BF24-02E8DD7F2DB2}由於以下錯誤而失敗:8007007e找不到指定的模塊(來自HRESULT的異常:0x8007007E)。「

我在Windows窗體應用程序上使用相同的dll和相同的代碼進行測試。它不會提供任何錯誤併成功創建類實例。

它可能是與網絡驅動器的權限相關的東西?

+0

CLSID是否已註冊?在註冊表中搜索它。網絡dll是一個需要註冊的COM對象,或者它是引用一個需要註冊的COM對象。 – 2012-03-30 03:29:54

+0

@Samuel Neff我在「65EB3876-89FF-459F-BF24-02E8DD7F2DB2」中搜索了regedit。是的,它已經註冊。當我將網絡驅動器上的dll添加爲參考時,是否需要註冊其他兩個自動添加的參考? – caranhithion 2012-03-30 05:43:25

+0

它是使用UNC路徑還是通過映射的驅動器號註冊的? – 2012-04-01 17:10:42

回答

1

Windows服務可能在不同憑據下運行,因此您的驅動器映射對於此帳戶不可見,因此DLL的路徑不存在。錯誤代碼表明你確切的問題。

Services and Redirected Drives

Drive mappings exist across logon contexts, so if an application is running in the context of the LocalService account, then any other service running in that context may have access to the mapped drive.

您需要使用UNC路徑重新註冊DLL,或者複製DLL到本地驅動器並重新註冊存在,或設置服務與相同的憑據互動usre運行驅動器映射存在。

+0

我試圖使用UNC路徑重新註冊DLL,但它不起作用。仍然「指定的模塊找不到。」例外。 – caranhithion 2012-04-10 09:58:58

+0

好的結果,我同意作爲無法訪問網絡的用戶運行的服務是最可能發生的問題。 – 2012-04-11 00:35:08