自动化默认程序关联

Posted

技术标签:

【中文标题】自动化默认程序关联【英文标题】:Automate the Default Program Association 【发布时间】:2020-05-10 20:16:10 【问题描述】:

我正在编写一个批处理脚本来自动化更改特定文件类型的默认程序关联的过程。

文件类型定义完美,我正在使用此命令更改打开它们的默认程序,例如:

ftype giffile="%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll" "%1"

但是运行这个之后,什么都不会改变!

“giffile”只是我尝试更改默认程序关联的文件类型的一个示例。

我错过了什么? (如果有更好的解决方案,建议会很好)

编辑:使用ftype 我可以将程序添加到“打开方式”列表中,并且不会更改用于打开特定文件类型的默认程序。

【问题讨论】:

一个reg.exe 替代方案:@"%__AppDir__%reg.exe" Add "HKCU\Software\Classes\giffile\shell\Open\command" /VE /D "\"%ProgramFiles%\Google\Chrome\Application\chrome.exe\" \"%%~1\"" /F>NUL。但是,您绝对没有给我们任何信息来作为答案的基础,因为我们不知道什么都不会改变!方法。是因为权限吗?因为您还没有重新启动/刷新注册表?谁知道?考虑到我们不是坐在您的 PC 前,而且这是系统配置更改,没有多少人会想盲目地运行该命令来为您调试。请澄清问题。 我已经编辑了这篇文章,希望我能让它更容易理解!我认为编辑部分会澄清问题!同样对于 reg.exe 替代方案,您说我仍然无法更改默认程序! 好吧,让我解释一下,我这样做是因为我正在尝试“在 Windows 10 上激活 Windows 照片查看器”并使用它而不是“照片”应用程序,我找到了解决方案编辑注册表。我还必须使用 GUI 将其设置为默认程序!所以我想到我可以写一个脚本来简单地做到这一点!并且“%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll”是一个文件的地址,我试图运行的所有 Windows 机器都已经拥有它!因此,通过这样做,我可以将我的脚本提供给我不专业的朋友,并为他们简化流程。 实际上,在测试了您的 reg 替代方案后,我发现它就像您在评论中所说的 ftype 一样。并且问题并没有解决,因为 ftype 或替代方案只是将应用程序添加到“打开方式”列表中,并且不会更改默认程序!谢谢你的cmets,你让我问的问题更清楚了! 嗯,这也取决于 porgram,它是用户还是机器设置,以及程序 ID、CLSID、持久处理程序和其他东西等其他东西是否到位。正如我所说,以这种方式修改注册表是不明智的。最好的办法是允许最终用户使用 OS GUI 或替代专门构建的软件执行他们自己的文件关联,并内置健壮性。 【参考方案1】:

哦,这很好,我花了几个小时才找到不当行为。为了测试这一点,我参考了 .txt 文件。 问题是,据我所知,您的数据类型已经用另一个 system-internal 程序打开。在我的例子中,.txt 连接到了 Wordpad。因此,如果您弄乱了注册表(没有其他东西是 assoc 和 ftype 做的),无论如何它都会回退到写字板。即使您尝试将其更改为另一个程序,它也会回退。

为了验证这种行为,您可以简单地考虑一个新的(未连接的)文件扩展名并尝试与您的程序关联。例如 .log 与我的系统没有关联,因此对 .log 文件执行以下步骤会立即按照我想要的方式更改其打开程序。如果已经为您连接了日志,请考虑一些全新的东西。

所以第一步是不要让它退回到写字板。由于写字板是 Windows 的可选功能,我们首先必须将其卸载。这在软件->程序->可选功能中最简单,然后在此处选择要卸载的。 由于您更喜欢批处理脚本的编程方式,我可以推荐 dism 命令,可以通过将“删除”替换为“添加”来反转。

dism /Online /Remove-Capability /CapabilityName:Microsoft.Windows.WordPad~~~~0.0.1.0

在此之后,如果您双击一个 txt 文件,它将不再默认打开。 然后,正如对该问题的许多不同答案所述,您只需更改文件扩展名以使其行为符合您的意愿,只需调用

assoc .txt

这会给你“txtfile”作为返回值。然后将 txtfile 类型与您希望打开的程序类型连接起来。确保它是 txtfile 而不是 textfile。我有点困惑这两者中的哪一个对我来说,我认为 Windows 标准是 txtfile。错别字在这里可能很难看。

ftype txtfile="exampleprogram.exe" "%1"
请记住,在批处理中您需要使用 %%1,因为第一个 % 已转义。如果省略 %1,程序会在双击时启动,但不会显示实际打开的文件。 之所以使用引号,是因为大多数程序的文件路径中都有空格。 我的示例卸载了写字板。虽然将所有文件类型重定向到用于替换 .txt 的程序应该没有问题,但请记住,.bat 和 .ini 文件默认情况下也由写字板打开,也许还有更多。

我包含了 txtfile 示例,因为这对我有用,并且您明确指出 giffile 只是一个示例。适应你的 giffile 差异是首先摆脱照片应用程序。研究表明,这也可以通过编程方式完成。

【讨论】:

以上是关于自动化默认程序关联的主要内容,如果未能解决你的问题,请参考以下文章

如何对微信小程序进行自动化测试

打开exe程序,自动打开关联网站。如何破解

svn关联Jenkins自动发布代码

自动化项目管理与PLM的关联

如何解决:登录桌面时自动运行的EXE提示“该程序没有与之关联来执行操作”,之后出现蓝屏代码0xc000021a

Ruby on Rails - 简单表单自动完成关联搜索