【发布时间】:2018-10-17 19:55:24
【问题描述】:
在我的软件中,我使用ShellExecuteEx 打开以本地.htm 文件形式呈现的报告。有时,在某些最终用户系统上,.htm 文件没有默认文件关联。
要在 Windows 10 之前的系统上设置此类文件关联,我将安装以下注册表项以使用 IE:
Key: HKEY_CURRENT_USER\Software\Classes\htm.file\Shell\open\Command
REG_SZ name: ""
REG_SZ value: "C:\Program Files (x86)\Internet Explorer\iexplore.exe" "%1"
Key: HKEY_CURRENT_USER\Software\Classes\.htm
REG_SZ name: ""
REG_SZ value: htm.file
Key: HKEY_CURRENT_USER\Software\Classes\.htm
REG_SZ name: PerceivedType
REG_SZ value: Document
然后我将更改通知 Windows 资源管理器:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
效果很好,但如何在 Windows 10 上为 Microsoft Edge 做同样的事情?
PS.:
我不想在那里使用 IE,因为它总是显示一个额外的选项卡,带有切换到 Edge 的唠叨,这对我的最终用户来说非常混乱。
【问题讨论】:
-
您可以改为使用 html 文件作为参数执行 Edge
-
让您的软件修改用户的关联很可能是个坏主意。您的程序可能会对某些用户造成伤害。我倾向于检测 ShellExecuteEx 的失败,然后直接打开 Edge。当然 Edge 可能不存在。
-
Windows 10 不允许应用程序任意更改文件关联。它必须由用户通过设置来完成。如果您需要证据,请在之前未安装过的 Windows 10 系统上安装 Google Chrome,并告诉安装程序您要将 Chrome 设置为默认浏览器;这样做时,它会打开相应的设置页面供您自己进行。此外,我刚刚参与了超过 25 个系统从 Windows 7 到 Windows 10 企业版的手动迁移,包括一些全新安装,没有一个缺少 .htm 关联。
-
@KenWhite:我希望你是对的。因为处理
.htm等基本扩展名的缺失文件关联非常令人沮丧。不过,请注意,我不是在谈论更改默认 Web 浏览器。这是关于使用具有.htm扩展名的本地路径打开一个本地文件。 PS。回到你所描述的,我想 90 年代后期的反垄断诉讼并没有教会 MS 什么。哈哈。 -
是的,就是他。
标签: winapi windows-10 microsoft-edge windows-shell