导入 .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 中找到键。
这会带来两个问题:
如果密钥被写入 HKEY_CLASSES_ROOT 我想知道它是否正在为整个机器注册它(而不是仅为当前用户)。
我的卸载程序使用与 运行 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_ROOT
是 HKEY_CURRENT_USER\Software\Classes
和 HKEY_LOCAL_MACHINE\Software\Classes
的 a merged view,它不存储自己的数据。
HKEY_CURRENT_USER
是 just a symlink 到 HKEY_USERS\S-....
,其中 S-... 是您的用户帐户的 SID。
理想情况下,您应该使用 NSIS 注册表功能,而不是 .reg 文件。
我需要帮助来理解 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 中找到键。
这会带来两个问题:
如果密钥被写入 HKEY_CLASSES_ROOT 我想知道它是否正在为整个机器注册它(而不是仅为当前用户)。
我的卸载程序使用与 运行 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_ROOT
是 HKEY_CURRENT_USER\Software\Classes
和 HKEY_LOCAL_MACHINE\Software\Classes
的 a merged view,它不存储自己的数据。
HKEY_CURRENT_USER
是 just a symlink 到 HKEY_USERS\S-....
,其中 S-... 是您的用户帐户的 SID。
理想情况下,您应该使用 NSIS 注册表功能,而不是 .reg 文件。