检测是否安装了Office 365

时间:2019-03-07 16:34:55

标签: c# c++ windows winapi office365

我需要以编程方式检测是否安装了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。

这是很棘手的,如果有人知道更简洁的方法,我将不胜感激。

编辑:

我需要这个的原因:

我的软件允许用户生成Excel文件(使用第三方库),然后在Excel中查看该文件。处理完成后,

  1. 当我仅尝试使用ShellExecuteEx打开.xls文件而未安装Excel时,将弹出Windows 10标准“如何打开此文件”对话框。

  2. 即使ShellExecuteEx返回了一条错误消息,而不是弹出Windows 10对话框(如前所述),该行为也不是我真正想要的,因为.xls文件的生成很漂亮将会发生很长的后续操作:用户执行生成Excel文件的命令,这需要10到15秒钟,然后会弹出一条错误消息,提示未安装Excel。我想事先告诉用户需要安装Excel。

1 个答案:

答案 0 :(得分:1)

我建议改为检查位于DisplayName路径中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall中是否包含Microsoft Office 365