(滚动到最底部直接跳到问题,但在这种情况下,不要盲目投票关闭...)
是的,我知道这个话题已经被反复讨论过很多次了这里,这里和这里,但我保证这不是重复的。这些都无法帮助将软件与文件扩展名关联到更大的范围内。事实上,我发现——至少在 Windows 10 (1803) 中——你可以更方便地更改关联,但文件类型管理器(我尝试了 1.83 版本)该技巧assoc
以及该工具ftype
均无效。
所有这些方法都失败了,因为它们在双击相关类型/扩展名的文件时,会生成一个 RT 样式的对话框,该对话框提供“继续使用此应用程序”的选项,默认为“照片”,然后提供一个潜在候选软件列表来处理下面的文件类型。
我希望我选择的软件能够毫无障碍地打开这些文件(以及额外的对话框)。
例如:我希望 SumatraPDF 能够打开一系列电子书文件类型以及 PDF(默认为 Edge),并希望 IrfanView 能够打开图像。安装应用程序时,我收到大量来自 Windows 的通知,告知我文件关联已重置。好了,控制系统上发生的事情就这么多了。
因此我以管理员身份启动了 IrfanView,并让其设置文件关联。唉,UserChoice
FileTypesMan 中的列一直显示AppX43hnxtbyyps62jhe9sqpdzxn1790zetc
,至少在我的系统上,它对应于 Windows 附带的照片(商店)应用程序。在这个例子中,我将讨论.bmp
文件。
UserChoice
当我尝试通过 FileTypesMan修复该列时,我遇到了一条错误消息,提示访问被拒绝。嗯,好吧……
所以我进程监控告诉我哪个键受到了访问被拒绝错误的影响。果然,它指出了试图在里面写入值HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp\UserChoice
。所以我检查了该键的权限,没有发现任何可疑之处。但在仔细检查该键的“高级安全设置”对话框后,UserChoice
我看到了以下内容:
不过,自从我在大学担任系统管理员以来,Deny
ACE 就很少见了。现在,我敏锐地意识到了 ACL 中的 ACE 优先规则,我立刻意识到这个Deny
ACE 就是问题所在。它主导了我用户帐户的 ACL。
诸如 FileTypesMan 之类的工具必须主动删除该 ACE,然后在进行任何操作后将其放回原处。显然它没有这样做(可能是我应该报告的一个缺陷?)。我不知道还有其他方法,可能的例外是获取并启用备份和/或恢复权限(又名用户权限) - 这相当于绕过 ACL 和 ACE(又名通过管理员手段作弊 ;))。
不管怎样,从那方面来说我运气不佳。
唉,我发现适用于 IrfanView 的解决方法。但是,同样的解决方法做过不是为 SumatraPDF 工作并且它涉及繁琐的鼠标点击(因此我问了这个问题)。
解决方法如下。打开“Windows 设置”应用程序,选择“应用”然后选择“默认应用程序”左侧的项目。在主窗格中向下滚动,然后从底部选择“按应用设置默认值”。
从那里找到您要管理的应用程序(在我的情况下是 IrfanView),然后点击“管理”按钮(选择您所需的程序后)。
然后会打开一个新列表,提供程序显然支持的文件扩展名的相对简单的概述(我猜HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.bmp\OpenWithProgids
或其他一些注册表设置在这里起作用),并允许您更改当前设置。
所以一切都很好,对吧?嗯,不是。虽然 IrfanView 列出了“按应用设置默认值”,SumatraPDF 无处可寻。
尽管 SumatraPDF 没有列出很可能是 SumatraPDF 的错误,但这仍然不能成为 Windows 恢复我有意识地并且完全打算进行的设置的借口。
因此,尽管“Windows 设置”应用显然有绕过Deny
ACE 的神奇魔力,但它仍然没有为我提供一种简单的方法来关联任何文件扩展名批量我选择的软件。
问题
因此,鉴于上述情况:我该如何将任意文件扩展名和任意安装的软件我选择的规模更大(即几乎批量) 并且无需繁琐的鼠标点击,也不会冒着 Windows 10 介入并撤销我有意识做出的选择的风险?
答案1
尽管一开始我对发帖者的问题持怀疑态度,但当发现微软的这一重大失误时,我还是震惊了。
我检查过的所有没有出现问题的情况都是在 Windows 10 版本 1809 之前安装的。当我下载 1809 版本的 Windows 10 企业版(商业版)和 Windows 10 专业版(消费者版)并在虚拟机中进行全新安装时,它们都有这个 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]
...
答案2
您可以列出文件扩展名和将运行该扩展名的相应应用程序,例如在 Excel 中,将其导出到 .csv 文件并使用以下链接中的 PowerShell 脚本: https://gallery.technet.microsoft.com/scriptcenter/How-to-associate-file-3898f323
您可以尝试编辑该脚本,使其读取.csv 文件并执行正确的扩展应用程序分配。
处理 .exe 扩展名时应小心谨慎,因为更改其行为可能会导致 Windows 出现一般问题。在 for 循环中更改所有扩展名只需几分钟。
编辑:根据评论,链接已失效,因此我粘贴以下脚本:
Function AssociateFileExtensions
{
Param
(
[Parameter(Mandatory=$true)]
[String[]] $FileExtensions,
[Parameter(Mandatory=$true)]
[String] $OpenAppPath
)
if (-not (Test-Path $OpenAppPath))
{
throw "$OpenAppPath does not exist."
}
foreach ($extension in $FileExtensions)
{
$fileType = (cmd /c "assoc $extension")
$fileType = $fileType.Split("=")[-1]
cmd /c "ftype $fileType=""$OpenAppPath"" ""%1"""
}
}
另存为AssociateFileExtensions.psm1
。
我从以下网址获取了此信息: https://web.archive.org/web/20201112024219/https://gallery.technet.microsoft.com/scriptcenter/How-to-associate-file-3898f323
答案3
由于这个问题不断被别人问到,我想更新一下,提供两个可以实现相同功能的工具链接。这两个链接都名为 STFA,代表“设置文件类型关联”,作者相同:
- github.com/DanysysTeam/SFTA
- github.com/DanysysTeam/PS-SFTA(PowerShell 重新实现上述内容)——配套博客文章
摆脱限制性 DACL 的方法似乎与 harrymc 概述的方法大致相同,即删除密钥然后重新创建它。
然而,根据查阅(PowerShell)代码的结果,计算这些哈希值的过程子项内设置的UserChoice
是让它发挥作用的真正魔法酱™。DACL 只是一个令人讨厌的烟幕弹。如果无法设置正确的哈希,Windows 只会通过通知告诉您它已恢复为某个默认值。
我发现的另一种方法是导出dism
在给定系统上准备的文件类型关联,例如cmd.exe
:
dism.exe /Online /Export-DefaultAppAssociations:%USERPROFILE%\Desktop\DefaultAssoc.xml
将其放到DefaultAssoc.xml
当前用户的桌面上。
然后,您可以使用您想要应用它们的系统上的dism
相应开关导入它/Import-DefaultAppAssociations:...
。对我来说,这不是特别方便,但至少这是一种可行的方法,因为我想列出所有可行的方法,所以应该在这里列出。
相关官方文档:导出或导入默认应用程序关联
先前关于该主题的研究显示本文和工具,可惜它不像上面那样是开源的。
答案4
我只需在硬盘上搜索我感兴趣的文件扩展名...比如 *.jpeg 然后我右键单击其中一个文件,在“常规”选项卡上查看“打开方式”,然后单击“更改”。在对话框中,如果您没有看到您的程序,请一直向下滚动并单击“更多应用程序”。现在您可以选择应用程序来打开该文件扩展名类型。您将看到它将所有文件更改为您选择的应用程序!非常简单。希望你明白,戴夫