我有一个.NET程序集,我需要在安装时注册。我注意到注册表在直接使用regasm
与通过regasm
的注册表脚本安装时存在细微差别。
这是我的测试:
我导出原来的HKCR配置单元,然后运行:regasm my.dll
从那里,我导出后来的HKCR蜂巢和表现差异。
然后我将该差异与regasm my.dll /regfile
有一些非常重要的条目通过regasm my.dll
添加,永远不会添加regasm
命令的注册表文件输出。的为什么吗
从安装的角度来看,我非常讨厌在安装过程中调用regasm
。我宁愿只运行这个.reg脚本。我现在正在使用InstallShield,它还缺少额外的注册表项(似乎它嵌入了使用/regfile
标志输出的注册表更改)。
答案 0 :(得分:2)
在使用ComRegisterFunction
属性修饰的方法的幕后进行额外的注册表操作。显然,/regfile
开关不会调用这些方法。
答案 1 :(得分:2)
每Regasm.exe (Assembly Registration Tool)(备注部分)
您可以使用/ regfile选项生成包含的.reg文件 注册表项而不是直接更改 注册表中。您可以通过导入更新计算机上的注册表 .reg文件与注册表编辑器工具(Regedit.exe)。请注意 .reg文件不包含任何可以由其创建的注册表更新 用户定义的寄存器功能。请注意,只有/ regfile选项 发出托管类的注册表项。此选项不会发出 TypeLibIDs或InterfaceIDs的条目。
InstallShield有一个名为“.NET COM Interop”的设置,它基本上告诉构建引擎执行regasm / regfile并在构建MSI之前将结果转换为注册表。如果你愿意,你可以继续这样做,但你必须静态添加额外的东西。