.net - 如何为当前用户注册一个类型库?

标签 .net deployment com registration typelib

我有一个名为 MyCOMAddin.tlb 的类型库,我使用 tlbexp.exeMyCOMAdd.dll 中提取了它。这是一个用 C# 编写的 .NET COM 公开类。此 dll 在每个用户级别注册。

问题是

  • 有什么方法可以让我也只为当前用户注册 MyCOMAddin.tlb 吗?

我试过 regtlibv12.exe,但它为所有用户注册。 这很不方便,因为如果任何用户在机器上卸载插件,其他用户仍然可以在后期绑定(bind)中访问 dll,将无法再访问类型库。

我正在使用 Inno setup 部署插件,因此我可以直接在注册表中写入 key 。但是我不知道哪些键以及在哪里写它们。

我希望 regtlibv12.exe 有一个 /peruser 选项。

最佳答案

这并非不可能,但您当然会遇到一些并发症。首先,仅仅在本地注册类型库是不够的,您还需要在本地注册 CLSID,否则它仍然无法正常工作。 Regasm.exe 完成的工作。比运行 regtlib 更喜欢它的/tlb 命令行选项(没有文件)。请注意,使用类型库的任何编程工具都可能需要一些额外的注册表项来将库识别为组件,例如,“Control”键很常见。

专业安装人员不依赖像 Regasm 或 Regtlib 这样的工具在安装时编写 key ,他们自己编写 key 。这当然需要知道这些键是什么。一种方法是观察安装工具使用 SysInternals 的 ProcMon 实用程序写入 key 。尽管它往往会产生大量信息。您会在 WiX project 中找到专用工具,Heat.exe是“收割”工具。修改您以这种方式找到的所有内容,从使用 HKCR 或 HKLM 改为使用 HKCU。 HKCR 映射到 HKCU\Software\Classes。可能为 64 位操作系统添加了 Wow6432Node。

并确保您确实需要注册的类型库。仅当您在另一个编程环境中使用该组件时才需要。以及使用在 STA 线程上创建的对象并从另一个线程调用它的极端情况,标准编码器使用类型库来编码跨单元的调用。并且不要忘记带有 list 的无注册 COM,因此根本不需要修改注册表。目前尚不清楚这是否适用于此。

关于.net - 如何为当前用户注册一个类型库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812697/

相关文章:

c# - 重新排序列表中项目的正确方法(nhibernate)

.net - 如何在 WPF 中删除 WebBrowser 上的滚动条

c++ - COM exe、C++ 和 MinGW

ruby-on-rails - Chef : deploy rails from git subfolder

c# - ComAddin.Object.SomeMethod 在一个项目中有效,但在另一个项目中无效

com - 如何在 WinDbg 中查看 VB6 控件级变量?

c# - 一个数据访问层服务于多个业务层?或不?

c# - 使用 .NET 4.5 和 IIS 的 MVC 中的应用程序死锁

java - Eclipse -> Run as -> Run on server - 如何让它与 JBoss 一起工作?

Git:应用程序配置和不同的环境