【发布时间】:2019-07-29 15:07:14
【问题描述】:
我需要以编程方式检测是否安装了 Microsoft Excel 2016(普通 Office 风格)或 Microsoft Excel(Office 365 风格)。
检测 Microsoft Excel 2016(普通 Office 风格)没问题,它可以正常工作,但检测 Excel Office 365 有点棘手。
我现在做什么:
- 我检查注册表项
HKEY_CLASSES_ROOT\.xlsmm\OpenWithProgids - 然后我枚举该键中的值(通常只有一个
"AppXdns5t4sbk...."形式的值) - 对于每个值,我打开“HKEY_CLASSES_ROOT\\Application”键并检查值 ApplicationName”是否为“Excel”,如果是,我假设已安装 Excel Office 365。
这很hacky,如果有人知道更清洁的方法,我将不胜感激。
编辑:
我需要这个的原因:
我的软件允许用户生成 Excel 文件(使用第 3 方库),然后在 Excel 中查看该文件。处理完成后,
-
当我只是尝试使用
ShellExecuteEx打开 .xls 文件且未安装 Excel 时,会弹出 Windows 10 标准“您要如何打开此文件”对话框。 即使
ShellExecuteEx返回错误消息而不是弹出 Windows 10 对话框(如前所述),这种行为也不是我真正想要的,因为 .xls 文件的生成时间很长而且会发生以下情况:用户执行生成 Excel 文件的命令,这需要 10 - 15 秒,然后会弹出一条错误消息,提示未安装 Excel。我宁愿事先告诉用户需要安装 Excel。
【问题讨论】:
-
@Flydog57 不是骗人的,但还是很有帮助的。
-
为什么需要检测这个?这听起来像是一个 X-Y 问题。如果安装了 Excel,你会做什么不同的事情?您可以尝试打开 Excel 文档并明智地处理故障吗?
-
@CodyGray 我对问题进行了一些澄清
标签: c# c++ windows winapi office365