注册表为所有用户

本文关键字:用户 注册表 | 更新日期: 2023-09-27 18:11:32

我为一个dll创建了一个per machine安装程序。

注册表在HKEY_LOCAL_MACHINE下正确创建。

HKEY_CLASSES_ROOT下的类定义仅为安装该程序的用户创建。同一机器上的其他用户没有这个注册表。

由此我的结论是HKEY_CLASSES_ROOT是每个用户的个体。保存所有用户的类数据的注册中心在哪里?

编辑:这是我如何定义本地机器的COM注册表:
<Class Id="{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}" Context="InprocServer32" Description="AdminAddins.MyClass" ThreadingModel="both" ForeignServer="mscoree.dll">
        <ProgId Id="AdminAddins.MyClass" Description="AdminAddins.MyClass" />
</Class>  
<File Id="fil08256E64C10A4B2F5423A768ECB9A473" Name="AdminAddins.dll" KeyPath="yes" Source="..'AdminAddins'bin'Release'AdminAddins.dll" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'Implemented Categories'{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32'1.0.5300.19297" Name="Class" Value="AdminAddins.MyClass" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32'1.0.5300.19297" Name="Assembly" Value="AdminAddins, Version=1.0.5300.19297, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32'1.0.5300.19297" Name="RuntimeVersion" Value="v2.0.50727" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32'1.0.5300.19297" Name="CodeBase" Value="file:///[#fil08256E64C10A4B2F5423A768ECB9A473]" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32" Name="Class" Value="AdminAddins.MyClass" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32" Name="Assembly" Value="AdminAddins, Version=1.0.5300.19297, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32" Name="RuntimeVersion" Value="v2.0.50727" Type="string" Action="write" />
<RegistryValue Root="HKLM" Key="SOFTWARE'Classes'CLSID'{1AF5E2B9-CC02-368F-A879-1DF3F538D71A}'InprocServer32" Name="CodeBase" Value="file:///[#fil08256E64C10A4B2F5423A768ECB9A473]" Type="string" Action="write" />

注册表为所有用户

From MSDN:

类注册和文件扩展名信息存储在HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER键下。HKEY_LOCAL_MACHINE'Software'Classes键包含可以应用于本地计算机上所有用户的默认设置。

HKEY_CURRENT_USER'Software'Classes键包含仅适用于交互用户的设置。HKEY_CLASSES_ROOT键提供了一个注册表视图,该视图合并了来自这两个源的信息。HKEY_CLASSES_ROOT还为为以前版本的Windows设计的应用程序提供了这个合并视图。

这个看起来也很有用:

要更改默认设置,将更改存储在HKEY_LOCAL_MACHINE'Software'Classes下。如果您将密钥写入HKEY_CLASSES_ROOT下的密钥,系统将信息存储在HKEY_LOCAL_MACHINE'Software'Classes下。如果你将值写入HKEY_CLASSES_ROOT下的键,而该键已经存在于HKEY_CURRENT_USER'Software'Classes下,系统将把信息存储在那里,而不是HKEY_LOCAL_MACHINE'Software'Classes下。