假设我属于Administrators
Windows 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
首先,需要澄清几点:
而“烦人”的键值并不在下
HKCR
,路径为:HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts
HKCR
是一个虚拟的蜂巢,它结合了来自这两个位置的条目:HKCU\SOftware\Classes
HKLM\SOFTWARE\Classes
为登录用户呈现有效的机器范围和每个用户关联的组合。
如果管理员用户在 下的 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
。