Skip to content

[Bug] 文件关联功能失效 #35

@Mikachu2333

Description

@Mikachu2333

本想自己提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给出了以下一些可能性

  1. 缺少了 DefaultIcon 注册,并且可能需要刷新 Shell 缓存
  2. 缺少 OpenWithProgids 注册
  3. UserChoice 无法删除
  4. UnassociateExtension 逻辑不完整: 取消关联时只删除了默认值,但扩展名的注册表键仍然存在,可能导致残留问题
  5. 缺少 ProgId 清理逻辑: 当所有扩展名都被取消关联后,ProgId 注册信息仍然残留在注册表中
  6. 潜在的缓冲区问题: IsAssociatedWithCurrentApp 中的 progId 缓冲区固定为 256 字符,可能不够用
  7. DeleteRegistryKey 无法删除带子键的键:RegDeleteKeyW 只能删除空的注册表键,如果键下有子键则会失败。应该使用 SHDeleteKeyW 来递归删除
  8. 优先级有误
    Windows 查找文件关联的优先级顺序是:
    1. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts.gif\UserChoice (最高优先级)
    2. HKEY_CURRENT_USER\Software\Classes.gif
    3. HKEY_CLASSES_ROOT.gif (系统级)
      当前代码只设置了 Software\Classes.gif,但如果 UserChoice 中存在其他程序的关联(如系统照片应用),Windows 会优先使用 UserChoice 的设置,UserChoice 键受到系统保护

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions