1

好的,我有 2 个问题,我在这里很忙,已经有一个星期了。

重要- 没有应用程序会构建或运行它。它将是单个客户端 dll(引用其他几个 dll),将放置在特定文件夹中,我需要使用 regasm 或其他方式注册此 dll。

概述:

所以我写了ac# COM ScannerController.dll。ScannerController 引用了五个 3rd 方 dll,这些 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 的调试文件夹。

问题一:

我到底如何使用 regasm 之类的东西注册我的 COM ScannerController.dll,并将其指向 ScannerController 引用的五个第 3 方 dll?

问题2:

我尝试将其修复到我计算机上本地路径中不存在 Integration.dll 的位置(因为我正在构建它)所以我将本地副本设置为 false。当我构建它时,在 oleview 中查看它,它说无法加载或找到它的依赖项。如何设置项目,以便在复制 local = false 的情况下,引用可以找到其他 3rd 方 dll?

很抱歉这个冗长的问题,但非常感谢您阅读并尝试帮助我。我为此寻找了高低,我现在只是精神疲惫。

4

1 回答 1

0

1) ScannerController.dll

COM注册使用regasm ScannerController.dll

2) 第 3 方 ActiveX dll

假设它已经注册:不需要任何操作。(否则注册regsvr32

3) 第 3 方托管库(无 com 类型/libsexposed)

使用以下 2 个选项之一来保证您的 ScannerController Libraray 可以访问这些托管库:

  • 将它们复制到您的 ScannerController.dll 或可能(我不是 100% 确定,您必须对其进行测试)到 ScannerController.dll 主机(exe /调用 ScannerController.dll 的进程)所在的文件夹
  • 在全局程序集缓存(托管库的注册表挂件)中注册这些库,以使它们对其他应用程序全局可用
于 2012-11-29T20:54:48.217 回答