我有一个.NET COM可见的进程外服务器,我们称之为Server.exe。我需要能够在可能安装了不同版本的.NET框架的系统上注册它,所以我想避免使用它的全名(它往往包含.NET框架的版本号)来调用RegAsm。
我一直在尝试通过导出注册表补丁并使用以下命令将其导入:
regasm /regfile:foo.reg Server.exe
reg import foo.reg
但是,应用修补程序无法正确注册组件。我可以直接使用regasm注册它。我是管理员。如果没有写入注册表补丁,那么什么是诅咒?
答案 0 :(得分:4)
这是因为RegAsm被破坏,并且通过注册表修补在常规注册和延期注册之间不一致,并且由于其量子性质,它将根据请求的行为产生不同的注册表项。使用RegAsm来模拟进程内和进程外服务器的叠加之间的量子计算还有待探索。
要解决此问题:
RegAsm /regfile:foo.reg Server.exe
生成注册表修补程序。RegAsm /register Server.exe
正确注册类型。HKEY_CLASSES_ROOT\CLSID\{YOUR-CLSID}
的路径。打开注册表并找到此密钥。将bar.reg中的所有条目复制到foo.reg,并从foo.reg中删除任何现有条目,这些条目将值添加到HKEY_CLASSES_ROOT\CLSID\{YOUR-CLSID}
的任何部分。
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{YOUR-CLSID}
而不是HKEY_CLASSES_ROOT\CLSID\{YOUR-CLSID}
中。要确保在32位和64位系统上进行一致的部署,请从路径中删除Wow6432Node\
(保留32位系统上的路径)并使用reg import foo.reg /reg:32
将它们应用于注册表。 /reg:32
是一个半文档化的开关,它应该适用于32位和64位版本的Windows,即使在64位版本的reg上也可以启用注册表反射,从而确保条目安装在正确的位置。