我有两台希望(Wix)安装我的软件的虚拟机。一个是Windows XP SP2,另一个是Windows XP SP1。它们都不使用域,并且它们都具有具有管理权限的本地用户管理员。为什么Regasm将ProgId放入HKEY_CURRENT_USER?
运行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文件。
谢谢。不知道什么配置问题可能会导致Regasm(或任何对HKCR的更新)写入HKCU而不是HKLM? – Bringer128 2012-04-13 00:50:22
在VS2005安装项目中,有一个名为'InstallAllUsers'的设置,似乎会影响RegAsm。由于我现在没有VS,因此无法确认。就我个人而言,我更喜欢.reg文件方法,因为您可以直接控制注册表发生的变化,与Regasm/regsvr32的某些模糊操作相反。 (顺便说一句,你也可以创建一个.reg文件,删除分支,例如卸载。) – 2012-04-13 09:51:34
是的,我最终修改了.reg文件,然后用heat.exe重新生成了我的Wix碎片。谢天谢地,Wix处理注册表的回滚,所以我不必担心这一点。 – Bringer128 2012-04-15 12:47:35