4

我有一个需要在安装时注册的 .NET 程序集。我注意到注册表在regasm直接使用与通过regasm注册表脚本安装时存在细微差别。

这是我的测试:

我导出原始 HKCR 配置单元,然后运行:regasm my.dll

从那里,我导出了随后的 HKCR hive 和性能差异。

然后我将该差异与输出进行比较regasm my.dll /regfile

有几个非常重要的条目是通过regasm my.dll这些条目添加的,这些条目永远不会与regasm命令的注册表文件输出一起添加。 为什么?

从安装的角度来看,我非常讨厌regasm在安装过程中打电话。我宁愿只运行这个 .reg 脚本。我现在正在使用 InstallShield,它在引擎盖下也缺少额外的注册表项(似乎它嵌入了使用/regfile标志输出的注册表更改)。

4

2 回答 2

4

Per Regasm.exe(程序集注册工具)(备注部分)

您可以使用 /regfile 选项生成包含注册表项的 .reg 文件,而不是直接对注册表进行更改。您可以通过使用注册表编辑器工具 (Regedit.exe) 导入 .reg 文件来更新计算机上的注册表。请注意,.reg 文件不包含任何可由用户定义的寄存器函数进行的注册表更新。请注意,/regfile 选项仅发出托管类的注册表项。此选项不会发出 TypeLibID 或 InterfaceID 的条目。

InstallShield 有一个名为“.NET COM Interop”的设置,它基本上告诉构建引擎在构建 MSI 之前执行 regasm /regfile 并将结果转换为注册表。如果你愿意,你可以继续这样做,但你必须静态添加额外的东西。

于 2013-02-02T02:39:55.700 回答
3

ComRegisterFunction额外的注册表操作正在使用该属性修饰的方法的幕后进行。显然,这些方法不是用/regfile开关调用的。

于 2013-02-01T18:41:53.130 回答