2012-11-29 61 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