昔日芳华Blog

INTP低精力人儿的小站

Windows 资源管理器不显示 NEF 缩略图?—— 记一次被卸载程序「连坐」删除的注册表修复

Windows · Registry · Shell

NEF 在资源管理器里永远停在默认图标、同目录 JPG 却正常;把 11 个 RAW 扩展横向摆开一比,缺口立刻现形——.nef 的缩略图注册被厂商卸载程序连坐删除,补回 4 条键即恢复。

对象 Windows 11 / NEF 手段 注册表逐键对照 结果 补 4 条键即恢复 副作用 释放 2,877 MB 缓存
TL;DR
  • 问题:装卸 Nikon NEF Codec 之后,.NEF 缩略图不再生成,同目录 JPG 完全正常
  • 死路:文件、RAW 解码器、缩略图缓存三项均被证据排除
  • 解法:给 .nef 补回 4 条 ShellEx 键,重启 Explorer
  • 规模:4 条注册表键 + 1 段诊断脚本,不安装任何软件

01现象

触发过程很清楚:装上 Nikon NEF Codec,发现异常,卸载,之后 .NEF 在资源管理器里再也不生成缩略图,永远停在默认图标。三条观察构成后面所有推理的支点:

  • 同目录的 .JPG 缩略图完全正常——这是最关键的一条
  • 不是”慢”,是根本不发起生成,等多久都不变
  • Photos、Photoshop、DxO PhotoLab 打开 NEF 都正常,双击可用
结论 文件没坏、解码器没坏——故障只发生在”该调用哪个缩略图处理器”这一层路由上。

02测量:解码链完好

先把”文件坏了””解码器没了”这两个最省事的假设用数据关掉:

  • 文件头 II*\0,标准 TIFF/NEF 结构,单文件约 45 MB,WPF/WIC 解码得到 8288 × 5520 完整图像
  • Microsoft.RawImageExtension 2.5.35.0 已安装,包状态 Ok
  • WIC 查询该 NEF 返回容器格式 {fe99ce60-…}——是 RAW 容器,不是 JPEG 的 {19e4a5aa-…}
  • GetPreview() 与 GetThumbnail() 均返回 S_OK
  • 文件内嵌的 1024 × 682 预览图可直接取出,耗时约 2 ms
结论 系统既有能力读取 NEF,也有能力提供预览。故障不在解码环节。

03死路:三条嫌疑

文件与解码器已在上一节关掉。剩下最常见的元凶是缩略图缓存,但这里有一条决定性反证:

误区澄清 JPG 与 NEF 共用同一份缩略图缓存。既然 JPG 正常,缓存读写就是好的。缓存里”缺 NEF 条目”只是结果——生成流程没被触发,自然写不进去。

排查缓存时确实撞见另一处隐患,但它是独立问题,不解释”只有 NEF 中招”:

  • 索引文件 thumbcache_idx.db 的最后写入时间比数据文件 thumbcache_768.db 早 8 个月
  • 15 个缓存文件合计 2,877 MB,其中三个主库各占 700 MB 以上
缩略图缓存构成(清理前,合计 2,877 MB)
thumbcache_1280
27.8%
thumbcache_768
27.5%
thumbcache_256
26.0%
thumbcache_exif
13.9%
其余 11 个文件
4.8%
结论修正 我原本把”清缓存”列为修复手段之一,实际它不是本病的解药;补注册表才是。清缓存属于顺带的卫生清理,只修掉索引脱节这个潜在隐患。

04转折:横向对照

单看 .nef 发现不了问题——键不存在就是不存在,没有”异常值”可看。把它和同类扩展摆在一起,缺口才现形。全系统共 113 个扩展注册了缩略图处理器,其中 RAW 类 11 个:

扩展扩展级 ShellEx缩略图处理器
.cr2 .cr3✅ 有PhotoMetadataHandler.dll
.arw .srw✅ 有PhotoMetadataHandler.dll
.dng✅ 有PhotoMetadataHandler.dll
.orf .rw2 …✅ 有PhotoMetadataHandler.dll
.nrw✅ 有PhotoMetadataHandler.dll
.nef❌ 无无法解析
结论 11 个 RAW 扩展里,唯独 .nef 没有扩展级 ShellEx。同为尼康 RAW 的 .nrw 反而完好——因为当年的安装器只接管了 .nef,卸载时也只删了它。

再把 SystemFileAssociations\.nef 与 .jpg、.nrw、.cr2 逐项比对,缺口共 8 项:

缺失项位置对照正常扩展
ShellEx 子键HKCR\.nef.nrw / .cr2 / .arw / .dng 均有
ShellEx 子键SFA\.nef.jpg 有
ImageOptionFlagsSFA\.nef.jpg 有
InfoTipSFA\.nef.jpg / .nrw / .cr2 均有
PreviewDetailsSFA\.nef.jpg / .nrw / .cr2 均有
ExtendedTileInfoSFA\.nef.jpg / .nrw / .cr2 均有
FullDetailsSFA\.nef.jpg / .nrw / .cr2 均有
SetDefaults 系列SFA\.nef.jpg / .nrw / .cr2 均有

原本 SFA\.nef 下只剩右键菜单项,6 个属性值全部为空——这些值控制平铺视图信息、悬停提示、预览窗格、详细信息列,所以除了缩略图,NEF 的预览窗格多半也是空的。现场还留着一个孤儿 ProgID Photoshop.CameraRawFileNikon.180,却没有任何 .nef 指向它。

安装 Codec接管 .nef 关联
→
卸载 Codec删除自写键
→
未还原默认值ShellEx 被删空
→
解析未命中不请求处理器
结果:显示默认图标,且永远不会自行生成

05解法:补回四条键

不安装任何软件。新建 fix_nef.reg,把下列内容存进去后双击导入:

REGWindows Registry Editor Version 5.00

; 1) 扩展级 IThumbnailProvider(最高优先级,直达处理器)
[HKEY_CURRENT_USER\SOFTWARE\Classes\.nef\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}]
@="{3F30C968-480A-4C6C-862D-EFC0897BB84B}"

; 2) 扩展级 IExtractImage(与 .nrw / .cr2 / .dng 一致)
[HKEY_CURRENT_USER\SOFTWARE\Classes\.nef\ShellEx\{e357fccd-a995-4576-b01f-234630154e96}]
@="{C7657C4A-9F68-40fa-A4DF-96BC08EB3551}"

; 3) SFA 层双保险
[HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.nef\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}]
@="{3F30C968-480A-4C6C-862D-EFC0897BB84B}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.nef\ShellEx\{e357fccd-a995-4576-b01f-234630154e96}]
@="{C7657C4A-9F68-40fa-A4DF-96BC08EB3551}"

四条键的含义:

  • 键名 {BB2E617C-…} = IThumbnailProvider,现代缩略图接口
  • 键名 {e357fccd-…} = IExtractImage,旧版缩略图接口
  • 值 {3F30C968-…} 与 {C7657C4A-…} = 都指向系统自带的 PhotoMetadataHandler.dll
结论 目标就是一直正常服务 JPG 缩略图的那个系统组件,不引入任何第三方代码,只增不删。

06数据:前后对照

用同一段 PowerShell 诊断脚本在修复前后各跑一次:

PowerShell$ext    = 'Registry::HKEY_CLASSES_ROOT\.nef'
$thumb  = '{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}'
$extract= '{e357fccd-a995-4576-b01f-234630154e96}'

"ShellEx 子键       : $(Test-Path "$ext\ShellEx")"
"IThumbnailProvider : $(Test-Path "$ext\ShellEx\$thumb")"
"IExtractImage      : $(Test-Path "$ext\ShellEx\$extract")"

$clsid = (Get-ItemProperty "$ext\ShellEx\$thumb').'(default)'
$dll   = (Get-ItemProperty "HKLM:\SOFTWARE\Classes\CLSID\$clsid\InprocServer32" -EA SilentlyContinue).'(default)'
"目标 DLL            : $dll"
检查项修复前修复后
扩展级 ShellExFalseTrue
IThumbnailProviderFalseTrue
IExtractImageFalseTrue
目标 DLL未解析PhotoMetadataHandler.dll
NEF 缩略图默认图标✅ 正常生成
结论 解析链在第一优先级就命中 PhotoMetadataHandler.dll,不再依赖低优先级回退;NEF 缩略图恢复正常。

07原理:解析与重启

Explorer 按固定顺序为一个扩展寻找缩略图处理器。修复前四层全部落空:

  1. 扩展级 ShellEx:.nef 下无 ShellEx 子键,未命中
  2. ProgID ShellEx:.nef 默认 ProgID 为空,未命中
  3. SFA 层 ShellEx:SFA\.nef 无该子键,未命中
  4. PerceivedType 回退:依赖”被当作图片”等前置条件,未能命中

四层全空,Explorer 就不再发起对处理器的请求,于是永远显示默认图标。修复后第 1 层直接命中,后面三层不再参与。

关于写入位置,本次选了 HKEY_CURRENT_USER\Software\Classes 而非 HKLM,理由有二:普通权限即可完成、不必过 UAC;Shell 实际读取的是 HKEY_CLASSES_ROOT,它是 HKCU 与 HKLM 的合并视图,HKCU 优先生效,效果等同。

PowerShell# 改完必须重启 Explorer,否则仍读旧的解析缓存
Stop-Process -Name explorer -Force
# 任务栏会短暂消失,系统会自动重启 explorer.exe

08教程:验证与回滚

手工修改(不想用 .reg 时)

  1. 打开注册表:按 Win + R,输入 regedit 回车
  2. 定位:导航到 HKEY_CURRENT_USER\Software\Classes
  3. 建 ShellEx:在 .nef 下新建项,命名 ShellEx
  4. 第一条键:其下新建项 {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1},默认值填 {3F30C968-480A-4C6C-862D-EFC0897BB84B}
  5. 第二条键:再建项 {e357fccd-a995-4576-b01f-234630154e96},默认值填 {C7657C4A-9F68-40fa-A4DF-96BC08EB3551}
  6. SFA 层:在 SystemFileAssociations\.nef 下重复上两步
  7. 收尾:关闭编辑器,重启 Explorer,回文件夹按 F5

预防再次发生

  • 安装任何 RAW Codec 之前先导出 .nef 注册表备份,卸载后立刻重跑 06 节脚本
  • 优先使用微软官方 Raw Image Extension,厂商 codec 现代 Windows 上通常已非必需,且卸载风险更高
  • 警惕第三方”文件关联管理”与”右键菜单管理”工具,它们同样可能清空扩展名的 ShellEx
  • 多账户机器要记得:写 HKCU 只对当前账户生效,其余账户需各自执行或改写 HKLM

回滚

REG; 只删本次新增的键,不动任何原有内容
reg delete "HKCU\Software\Classes\.nef\ShellEx\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}" /f
reg delete "HKCU\Software\Classes\.nef\ShellEx\{e357fccd-a995-4576-b01f-234630154e96}" /f
reg delete "HKCU\Software\Classes\SystemFileAssociations\.nef\ShellEx" /f
教训 这类故障的高发源头是厂商卸载程序的”连坐”删除。装之前花十秒导出注册表,能省下半天排查。

09边界

边界教训 第 4 层的 PerceivedType 回退理论上本应兜住 .nef,该键确实存在且完好。我没有直接观测到回退链究竟在哪一环断裂——修复时补注册表与清缓存同时执行,两个变量一起改变,无法干净分离。能确定的是:.nef 注册被删空是客观存在、且只有 NEF 才有的缺陷,修复后恢复反证了它确实是致因;但具体是 ShellEx 缺失还是 ImageOptionFlags 缺失导致回退失效,属于推断,不是直接观察到的。

适用范围与前提:

  • 已在 Windows 11(build 26100 / 26200)、PhotoMetadataHandler.dll 10.0.26100.9444 环境验证通过
  • 症状必须是”只有 NEF 不出缩略图,其他格式正常“;若所有图片都不出,是另一个问题
  • 若从未安装过厂商 RAW Codec,成因可能不同,建议先跑 06 节脚本确认再动手

10FAQ

为什么偏偏只有 NEF 坏,JPG 却没事?
因为两者的注册完整度不同:JPG 的扩展级、ProgID、SFA 层注册齐全,随便哪一层都能接住;.nef 的扩展级与 SFA 层被删空,四层解析全部落空。而缓存是两者共用的,JPG 正常正好反证缓存无辜。
为什么补完注册表还看不到效果?
最常见的两个原因:一是没重启 Explorer,它仍读旧的解析缓存;二是没刷新文件夹,按 F5。都做了还不行,就重跑 06 节诊断脚本确认键确实写进去了,再查 Microsoft.RawImageExtension 包状态是否为 Ok。
必须用管理员权限吗?写 HKCU 会污染全站吗?
不需要提权,HKCU 是当前用户的配置,也不影响系统其他账户和其他用户。如果你的机器有多个账户,其他账户登录后需各自执行一次;想要一次对所有账户生效,再以管理员身份把同样内容写到 HKEY_LOCAL_MACHINE\Software\Classes。
顺手清掉 2,877 MB 缓存值不值?
值,但要分清主次:它修的是索引脱节这个潜在隐患,不是本病的解药。清掉后所有文件缩略图都要重新生成,文件夹越大越慢(单张 NEF 全解码约 1.5 秒)。所以顺序应当是先补注册表,无效再考虑清缓存。

本文为个人实验记录,与文中提及的任何厂商均无关联,不构成官方支持意见,复现风险自负。
修改注册表前请先导出备份,确保任一步都可回滚。
本文由AI辅助生成,请注意甄别

发表回复

Your email address will not be published. Required fields are marked *.

*
*

Captcha Code

人,咪欢迎你来
咕咕猫儿
这是咕咕猫儿
咕咕猫出生于2024年7月8日 蓝双布偶弟弟

最新文章
最新评论

友情链接

内鬼酱~koishi
Giftia终端服务部
SSP97
卧槽.萌
1919810.com
氖罩测评网站
橙的核电站