如何在 Windows 10 (1803) 中方便地批量重新分配文件关联?

0xC*_*22L 14 file-association permissions windows-10

(通过滚动到最底部跳到问题,但在这种情况下不要盲目投票关闭......)

是的,我知道这个话题在这里这里这里被反驳了很多次,但我保证这不是重复的。这些都没有帮助将软件与更大规模的文件扩展名相关联。事实上,我发现-至少在Windows 10(1803) -你可以更方便地修改协会,但无论是FileTypesMan(我试过1.83版本)招也不是工具assocftype协同工作。

所有这些方法都失败了,因为它们产生了 - 在双击相关类型/扩展名的文件时 - RT 风格的对话框让我“继续使用这个应用程序”,将“照片”作为默认值,然后提供处理以下文件类型的潜在候选软件列表。

我希望我选择的软件可以在没有 ifs 和 buts(以及额外的对话框)的情况下打开这些文件。


示例:我希望 SumatraPDF 与 PDF(默认为 Edge)和 IrfanView 一起打开一系列电子书文件类型以打开图像。安装应用程序后,我收到了大量来自 Windows 的通知,指出文件关联已被重置。好吧,控制我的系统上发生的事情到此为止。

所以我以管理员身份启动了 IrfanView 并让它设置了文件关联。唉,UserChoiceFileTypesMan 中的列一直显示AppX43hnxtbyyps62jhe9sqpdzxn1790zetc,至少在我的系统上对应于 Windows 附带的照片(商店)应用程序。对于这个例子,我将讨论.bmp文件。

在尝试UserChoice通过 FileTypesMan修复该列时,我遇到了一条错误消息,表明访问被拒绝。嗯好吧...

所以我让Process Monitor向我展示了访问被拒绝错误影响的键。果然它指出了在里面写值的企图HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp\UserChoice。所以我检查了该密钥的权限,没有发现任何可疑之处。但是在“高级安全设置”对话框中仔细检查UserChoice密钥时,我看到了这一点:

高级安全设置

不过,自从我在大学担任系统管理员以来,DenyACE 就很少见了。现在,敏锐地意识到 ACL 中的 ACE 优先级规则,我立即意识到这个DenyACE 是问题所在。它支配了我的用户帐户的 ACL。

FileTypesMan 之类的工具必须主动删除该 ACE,然后在进行任何操作后将其放回原处。显然它不会这样做(可能是我应该报告的缺陷?)。除了获取和启用备份和/或恢复权限(也就是用户权限)之外,我不知道其他任何方法——这相当于回避 ACL 和 ACE(也就是通过管理员的手段作弊;))。

无论如何,我在那方面运气不佳。


唉,我找到了一种适用于 IrfanView 的解决方法。然而,相同的解决方法工作SumatraPDF,它涉及繁琐的鼠标点击(因此,我问这个问题)。

解决方法如下。打开“Windows 设置”应用,选择“应用”,然后选择左侧的“默认应用”项。在主窗格中向下滚动,然后从底部选择“按应用设置默认值”

默认应用

从那里找到应用程序 - 在我的情况下是 IrfanView - 您想要管理并点击“管理”按钮(在选择您选择的程序后)。

应用列表中的 IrfanView

然后打开一个新列表,提供程序显然支持的文件扩展名的相对简单概述(我的猜测是HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp\OpenWithProgids或者其他一些注册表设置在这里起作用),并允许您更改当前设置。

为文件扩展名选择一个新程序

所以一切都很好,对吧?嗯,没有。虽然 IrfanView 为“按应用程序设置默认值”列出了该列表,但找不到 SumatraPDF。

虽然没有列出 SumatraPDF 的事实很可能是 SumatraPDF 的错,但这仍然不能成为 Windows 恢复我有意识地进行并完全打算进行的设置的借口。


因此,虽然该“Windows 设置”应用程序显然具有绕过DenyACE的魔力,但它仍然没有为我提供一种简单的方法来将任何文件扩展名批量关联到我选择的软件。

因此,鉴于上述情况:如何将任意文件扩展名与我选择的任意已安装软件以更大的规模(即几乎是批处理)相关联,并且没有繁琐的鼠标点击狂欢,也没有冒着 Windows 10 介入并有意识地恢复的风险做出了选择?

har*_*ymc 5

虽然一开始我对海报的问题持怀疑态度,但我惊讶地发现微软的这个巨大的失误。

我检查过的所有没有出现问题的案例,都是在 Windows 10 版本 1809 之前安装的。 当我下载 1809 版本的 Windows 10 Enterprise(商业)和 Windows 10 Pro(消费者)并在虚拟机中进行全新安装时,他们有这个ACL!

此 ACL 是新增的,在以前的版本中不存在。它显然仅在全新安装期间存储,而不是在从先前版本升级到 1809 期间存储。我不知道是什么头脑风暴带来了这个,但微软显然决定强迫全世界使用它的照片应用程序。

我们开发人员别无选择,只能适应这种新情况。您需要删除这个新的阻塞 ACL。

如果您正在寻找.reg删除Set Value条目的文件形式的解决方案,我认为您需要删除整个分支.bmp并重新创建它以摆脱它。否则,更改权限将需要脚本或安装程序。

就像是 :

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp]
...
Run Code Online (Sandbox Code Playgroud)


0xC*_*22L 2

由于其他人不断向我提出这个问题,因此我想用两个可以实现相同目标的工具链接来更新此问题。两者都将 STFA 命名为“设置文件类型关联”,并且由同一作者编写:

\n\n

摆脱限制性 DACL 的方法似乎大致相当于 harrymc 概述的方法,即删除密钥然后重新创建它。

\n

然而,通过查阅(PowerShell)代码发现,计算子项内设置的那些哈希值的过程UserChoice才是真正使其发挥作用的 Magic Sauce\xe2\x84\xa2 。DACL 只是一个令人讨厌的转移注意力的东西。如果无法设置正确的哈希值,Windows 只会通过通知告诉您它已恢复为某些默认值。

\n
\n

我发现的另一种方法用于dism导出在给定系统上准备的文件类型关联,例如cmd.exe

\n
dism.exe /Online /Export-DefaultAppAssociations:%USERPROFILE%\\Desktop\\DefaultAssoc.xml\n
Run Code Online (Sandbox Code Playgroud)\n

将其拖放DefaultAssoc.xml到当前用户的桌面上。

\n

然后,您可以稍后将其与要应用它们的系统上的dism相应开关一起导入。/Import-DefaultAppAssociations:...对我来说这不是特别方便,但至少它是一种工作方法,因为我想列出所有工作方法,所以应该在这里列出。

\n

相关官方文档:导出或导入默认应用程序关联

\n
\n

之前关于该主题的研究给出了这篇文章和工具,可惜它不像上面那样开源。

\n


归档时间:

查看次数:

2010 次

最近记录:

4 年,6 月 前