2012-11-29 30 views
1

好吧,我有2個問題,我在這裏泡菜,已經有一個星期了。註冊一個引用多個dll的dll

重要 - 沒有應用程序將構建或運行它。這將是一個單一的客戶端端DLL(引用其他幾個DLL),將被放置在特定的文件夾,我將需要註冊此DLL使用regasm或其他東西。

概述:

所以我有一個C#COM ScannerController.dll寫。 ScannerController引用了五個第三方DLL,它們已經被安裝並註冊到整個c:\ Program Features \ etc ....文件夾中(這些位置將根據它們所在的軟件版本而變化,但dll將是相同。)

這一個DLL(integration.ActiveX(它是一個程序集))有一個名爲InstalledPath的方法。 InstalledPath返回執行程序集的實際位置。當我完成dll時,我通過IExplorer運行它,它返回了正確的「../program features/....」。

然後,爲了在另一臺計算機上設置它,我取消了註冊,然後運行了一些regasms並在「Scanner/bin/debug/integration.ActiveX」註冊了dll(該oleview說它找不到它的依賴關係)所以我沒有註冊它,在vs2012中構建它,現在當我從IExplorer運行它時,InstalledPath是「../bin/debug/」。我創建了一個新項目,構建它自動註冊它,並從iexplorer運行它,InstalledPath是「..Scanner-fake/bin/debug /」。我已經在cmd註銷了一百萬次,無論我做什麼,它現在總是指向註冊的ScannerController的調試文件夾。

問題1:

如何在世界上註冊我的COM ScannerController.dll,使用類似regasm,並且還指向五個第三方的DLL ScannerController引用?

問題2:

我試着將它固定到Integration.dll不會在我的電腦上的本地路徑存在(因爲我構建它),所以我設定的本地副本爲false。當我構建它時,在oleview中查看它,它說它的依賴不能被加載或找到。我該如何設置項目,以便copy = local = false,引用可以找到其他第三方dll?

對不起長時間的問題,但非常感謝你的閱讀和嘗試幫助我。我爲此搜尋了高低,現在我只是精神疲憊。

+0

Integration.Activex.dll,ScannerController.dll(建於VS2012)加5的第三方(COM? )dll已經安裝並在目標計算機上註冊。這是你有什麼? –

+0

對不起,Integration.ActiveX.dll是第三方DLL(所有第三方DLL已經在我的機器上註冊)之一。第三方DLL中有4個是Type:Assembly,1是Type:ActiveX。 ScannerControll.dll是一個COM對象,它是在我的機器上本地構建的。 – Godrules500

回答

0

1)ScannerController.dll使用regasm ScannerController.dll

2)第三方的ActiveX DLL

假設它已經註冊

COM註冊:不需要任何操作。(否則有regsvr32註冊)

3)第三方託管庫(沒有COM類型/ libsexposed)

使用下列2選項guarantie您ScannerController Libraray可以訪問這些託管庫之一:

  • 將它們複製到您的ScannerController.dll或可能(我不是100%確定,您必須測試它)的文件夾到ScannerController.dll主機 - exe /進程調用ScannerController.dll所在的文件夾 - 駐留
  • global assembly cache(對於託管庫註冊表吊墜),以使它們在全球範圍提供給其他應用程序
  • 註冊這些庫
+0

我不能讓他們傷心地走在同一條路上。對這個公司進行版本控制的唯一方法是查看文件路徑(我認爲這很愚蠢)。無論如何,對於第三方託管庫,我可以設置類ID?我知道每個圖書館的班級ID。或者有沒有什麼辦法可以設置一個目錄讓它看起來。這一家公司將有../程序文件/ Inuvio/ics 5.5。然後他們的新軟件是../Inuvio/ics 6.0。我可以將它設置爲在../Inuvio目錄中查找dll嗎?並且你所有的例子都將其稱爲copy local = false right? – Godrules500

+0

你是什麼意思,你知道班級ID。 ClassId(Guid)來自注冊表?我認爲這是純粹的託管代碼。除非公開接口,否則託管代碼不會被註冊。 –

+0

是的,我知道註冊表中的GUID。我不太清楚你的託管代碼是什麼意思(我將會研究定義,所以我聽起來並不笨,但是我的腦子被炒了!哈哈),但是是的,com對象被暴露了,我知道所有的第三黨dll GUIDS。 – Godrules500