导入 .Reg 文件定位 HKEY_CURRENT_USER 在其他配置单元中创建附加条目

Importing .Reg File Targeting HKEY_CURRENT_USER Creates Additional Entries In Other Hives

我需要帮助来理解 Windows 在我尝试通过导入 .reg 文件将密钥写入 HKEY_CURRENT_USER 时创建的注册表项。

我在 NSIS 中编写了一个安装程序,它为标准用户安装软件并且不需要管理员身份验证。安装程序仅为当前用户安装软件。

我的软件包含两个使用 COM 的 DLL,因此必须注册它们。但是,由于我的安装程序不要求管理员身份验证,因此我无法使用 regasm。相反,我正在使用 post:

中描述的 .reg 文件导入技术

实际上,我 运行 RegAsm 使用 /regfile 开关来创建一个 .reg 文件。然后我替换

的所有实例

[HKEY_CLASSES_ROOT\

[HKEY_CURRENT_USER\

这些是 RegAsm 使用 HKEY_CLASS_ROOT 创建的密钥(然后我将其替换为 HKEY_CURRENT_USER):

[HKEY_CURRENT_USER\Software\Classes\MyDllLibrary.clsMyClass] [HKEY_CURRENT_USER\Software\Classes\MyDllLibrary.clsMyClass\CLSID] [HKEY_CURRENT_USER\Software\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}] [HKEY_CURRENT_USER\Software\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32] [HKEY_CURRENT_USER\Software\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32.0.0.0] [HKEY_CURRENT_USER\Software\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\ProgId] [HKEY_CURRENT_USER\Software\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\实施类别{62C8FE65-4EBB- [HKEY_CURRENT_USER\Software\Classes\MyDllLibrary.clsMyClass2] [HKEY_CURRENT_USER\Software\Classes\MyDllLibrary.clsMyClass2\CLSID] [HKEY_CURRENT_USER\Software\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}] [HKEY_CURRENT_USER\Software\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32] [HKEY_CURRENT_USER\Software\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32.0.0.0] [HKEY_CURRENT_USER\Software\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\ProgId] [HKEY_CURRENT_USER\Software\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\实施类别{62C8FE65-4EBB-

在我导入上面的 .reg 文件后,令我惊讶的是,当我在注册表中搜索我的 dll 名称时,我发现 Windows 在以下 3 个位置创建了密钥:

HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_USERS

我原以为只能在 HKEY_CURRENT_USER 中找到键。

这会带来两个问题:

  1. 如果密钥被写入 HKEY_CLASSES_ROOT 我想知道它是否正在为整个机器注册它(而不是仅为当前用户)。

  2. 我的卸载程序使用与 运行 RegAsm /regfile 开关相同的技术“注销”Dll,然后替换

    的所有实例

[HKEY_CURRENT_USER

[-HKEY_CURRENT_USER

问题是我的卸载程序只删除了 HKEY_CURRENT_USER 键,留下了 HKEY_CLASSES_ROOT 和 HKEY_USERS 键。

我想了解为什么 Windows 正在编写这些额外的密钥,以及我是否需要在卸载时清理它们。

这是键的列表 Windows 正在以下位置创建条目:

Computer\HKEY_CLASSES_ROOT\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32 Computer\HKEY_CLASSES_ROOT\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32.0.0.0 Computer\HKEY_CLASSES_ROOT\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32 Computer\HKEY_CLASSES_ROOT\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32.0.0.0 Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32 Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32.0.0.0 Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32 Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32.0.0.0 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001\SOFTWARE\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001\SOFTWARE\Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32.0.0.0 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001\SOFTWARE\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001\SOFTWARE\Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32.0.0.0 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001_Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001_Classes\CLSID{3B8612DE-E333-31D5-86DA-9ED6D4B14A1C}\InprocServer32.0.0.0 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001_Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32 Computer\HKEY_USERS\S-1-5-21-529589846-3326646294-2506018130-1001_Classes\CLSID{FCE641D6-51C1-3648-AB43-C1F9BB812FC5}\InprocServer32.0.0.0

请帮助我理解为什么要创建这些密钥,以及是否有任何方法可以使用我被迫使用的 reg 文件导入技术来清理它们。

期待您的见解。

马修

它们只在一个地方创建。

HKEY_CLASSES_ROOTHKEY_CURRENT_USER\Software\ClassesHKEY_LOCAL_MACHINE\Software\Classesa merged view,它不存储自己的数据。

HKEY_CURRENT_USERjust a symlinkHKEY_USERS\S-....,其中 S-... 是您的用户帐户的 SID。

理想情况下,您应该使用 NSIS 注册表功能,而不是 .reg 文件。