为什么Regasm将ProgId放入HKEY_CURRENT_USER?

时间:2012-04-11 09:24:53

标签: com wix regasm

我有两个虚拟机,我希望(Wix)安装我的软件。一个是Windows XP SP2,另一个是Windows XP SP1。它们都不使用域,并且它们都具有管理员权限的本地用户Administrator。

运行RegAsm.exe在带有SP3的计算机上注册MyApp.dll会将我的ProgId放入文件夹中:

  

HKEY_CLASSES_ROOT \ MyAppProgId

     

HKEY_LOCAL_MACHINE \ Software \ Classes下\ MyAppProgId

而在SP2计算机上运行它会将其放在文件夹中:

  

HKEY_CLASSES_ROOT \ MyAppProgId

     

HKEY_CURRENT_USER \ Software \ Classes下\ MyAppProgId

我在尝试从服务加载MyApp.dll时发现了这一点。从RegAsm.exe和Heat.exe生成的注册表文件似乎都在更新HKEY_CLASSES_ROOT。

有谁知道可能导致这种情况的原因?

编辑:我最终通过直接写入HKEY_LOCAL_MACHINE而不是HKCR来解决这个问题 - 这涉及手动编辑生成的.reg文件或.wxs文件。

1 个答案:

答案 0 :(得分:1)

在较旧的设置中,HKEY_LOCAL_MACHINE对于普通用户是可写的,在较新的Windows(例如Windows 7)上,它不是。可能取决于配置,用户帐户类型等。

注册课程要么HKEY_LOCAL_MACHINE\SOFTWARE\Classes(有时是可写的,如上所述)或HKEY_CURRENT_USER\Software\Classes(总是可写的)。两者都有效。第一种情况是压倒性的默认值。

HKEY_CLASSES_ROOT实际上只是一个视图,它合并了上述分支的内容。这就是为什么你在两个不同的位置看到它。

RegAsm似乎足够聪明,可以检测HKLM的只读状况,并自动选择HKCU。或者您的虚拟机之间存在一些不同的配置设置。

主要区别在于,在第二种情况下, dll仅可在您注册的用户帐户下使用。您的服务可能在另一个帐户下运行,因此无法在第二台计算机上加载dll。

相关问题