-
Notifications
You must be signed in to change notification settings - Fork 37
Open
Description
本想自己提pr的,修了半天死活修不好,放弃了……
只知道win读取了以下这一堆注册表键值。此外,我检查了程序设置的逻辑,确认了程序设置的注册表键值全都已正确创建。
HKEY_USERS\S-1-5-21-XXXXXXXX_Classes\.gif
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.gif
HKEY_USERS\S-1-5-21-XXXXXXXX_Classes\.gif\
HKEY_USERS\S-1-5-21-XXXXXXXX\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif
HKEY_USERS\S-1-5-21-XXXXXXXX\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif\UserChoice
HKEY_USERS\S-1-5-21-XXXXXXXX\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif\UserChoice\ProgId
HKEY_USERS\S-1-5-21-XXXXXXXX\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.gif\UserChoice\Hash
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\PreviewDetails
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\ShellEx\ContextMenuHandlers
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\ShellEx\ContextMenuHandlers\ShellImagePreview
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\ShellEx\ContextMenuHandlers\ShellImagePreview\
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\ImageOptionFlags
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\Shell
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\Shell\setdesktopwallpaper
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\Shell\setdesktopwallpaper\Command
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\Shell\setdesktopwallpaper\MultiSelectModel
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.gif\Shell\setdesktopwallpaper\
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers\.gif
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers\.gif\
其他尝试
问了问ai,ai给出了以下一些可能性
- 缺少了 DefaultIcon 注册,并且可能需要刷新 Shell 缓存
- 缺少 OpenWithProgids 注册
- UserChoice 无法删除
- UnassociateExtension 逻辑不完整: 取消关联时只删除了默认值,但扩展名的注册表键仍然存在,可能导致残留问题
- 缺少 ProgId 清理逻辑: 当所有扩展名都被取消关联后,ProgId 注册信息仍然残留在注册表中
- 潜在的缓冲区问题: IsAssociatedWithCurrentApp 中的 progId 缓冲区固定为 256 字符,可能不够用
- DeleteRegistryKey 无法删除带子键的键:RegDeleteKeyW 只能删除空的注册表键,如果键下有子键则会失败。应该使用 SHDeleteKeyW 来递归删除
- 优先级有误
Windows 查找文件关联的优先级顺序是:- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts.gif\UserChoice (最高优先级)
- HKEY_CURRENT_USER\Software\Classes.gif
- HKEY_CLASSES_ROOT.gif (系统级)
当前代码只设置了 Software\Classes.gif,但如果 UserChoice 中存在其他程序的关联(如系统照片应用),Windows 会优先使用 UserChoice 的设置,UserChoice 键受到系统保护
Metadata
Metadata
Assignees
Labels
No labels