为所有用户注册文件扩展名

为所有用户注册文件扩展名

假设我属于AdministratorsWindows 10,并且我想要:

  • 我。
  • 所有其他现有用户。
  • 尚未创建用户。

当上述列表中的任何人按下 PDF 文件上的“Enter”键时,PDF 都会使用 SumatraPDF 打开。

到目前为止:

HKCR/.pdf我创建了一个具有默认值的密钥SumatraPDF

HKCR/SumatraPDF/Shell/open/command然后我创建一个具有默认值的键"C:\Program Files\SumatraPDF\SumatraPDF.exe" "%1"

但事情没那么容易。

其中有一些恼人的关键因素HKCU/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/FileExt使事情变得困难。

有人能解释一下在 Windows 10 上注册文件扩展名的逻辑吗?

PS:Edge 通常会捕获 PDF 文件扩展名,但deny write对于每个人来说并非如此。

答案1

首先,需要澄清几点:

  1. 而“烦人”的键值并不在下HKCR,路径为:

    • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts
  2. HKCR是一个虚拟的蜂巢,它结合了来自这两个位置的条目:

    • HKCU\SOftware\Classes
    • HKLM\SOFTWARE\Classes

    为登录用户呈现有效的机器范围和每个用户关联的组合。

  3. 如果管理员用户在 下的 regedit.exe 中创建新密钥HKCR,则它将在以下位置创建:

  • HKLM\SOFTWARE\Classes

    如果标准用户创建相同的密钥,则在以下情况下创建:

  • HKCU\SOftware\Classes

因此,为了避免混淆,请根据您的意图从 读取HKCR,但写入HKCU或。HKLM


对于核心问题,创建以下组合:

  • HKLM\SOFTWARE\Classes\<FileExt>
    • 默认值为<ProgID>

  • HKLM\SOFTWARE\Classes\<ProgID>
    • 使用显示为的默认值FileType,以及定义默认操作所需的子项,将创建一个计算机范围的关联,该关联将成为新用户和现有用户的默认关联*这些用户从未覆盖通过文件对话框打开文件Open with >并选择或执行类似操作的默认操作。Always use this program...Properties

这个动作会UserChoice在下方创建一个 sbukey:

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<FileExt>

并覆盖默认值。

不幸的是,(我上次检查时)有一层额外的保护,可以阻止删除或修改密钥通过脚本,但即使标准用户也可通过 以交互方式删除regedit.exe

相关内容