【问题标题】:Why does regasm /regfile seem incomplete?为什么 regasm /regfile 似乎不完整?
【发布时间】:2013-02-01 18:11:39
【问题描述】:

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

这是我的测试:

我导出原来的 HKCR hive,然后运行:regasm my.dll

从那里,我导出后续的 HKCR 配置单元并执行差异。

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

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

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

【问题讨论】:

  • 缺少哪些条目?
  • 这是非常特定于应用程序的(GUID 不是“我们的”之一,但可能是由依赖项引入的?):[HKEY_CLASSES_ROOT\CLSID\{xxxx}\Implemented Categories\{B56A7C42-83D4-11D2-A2E9-080009B6F22B}]
  • 谷歌搜索似乎与 ESRI Mx 命令有关 - 您想知道什么问题的答案?
  • 是的,与此有关。我的问题:为什么regasm /regfile 的输出不生成这个条目?此注册表项仅在直接执行regasm 后才会出现在系统上。

标签: .net registry installshield


【解决方案1】:

Regasm.exe (Assembly Registration Tool)(备注部分)

您可以使用 /regfile 选项生成一个 .reg 文件,其中包含 注册表项,而不是直接对 注册表。您可以通过导入 .reg 文件与注册表编辑器工具 (Regedit.exe)。请注意, .reg 文件不包含任何可以通过以下方式进行的注册表更新 用户定义的寄存器功能。请注意,仅 /regfile 选项 发出托管类的注册表项。此选项不发出 TypeLibID 或 InterfaceID 的条目。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多