【问题标题】:Detecting if Office 365 is installed检测是否安装了 Office 365
【发布时间】: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 中查看该文件。处理完成后,

  1. 当我只是尝试使用 ShellExecuteEx 打开 .xls 文件且未安装 Excel 时,会弹出 Windows 10 标准“您要如何打开此文件”对话框。

  2. 即使 ShellExecuteEx 返回错误消息而不是弹出 Windows 10 对话框(如前所述),这种行为也不是我真正想要的,因为 .xls 文件的生成时间很长而且会发生以下情况:用户执行生成 Excel 文件的命令,这需要 10 - 15 秒,然后会弹出一条错误消息,提示未安装 Excel。我宁愿事先告诉用户需要安装 Excel。

【问题讨论】:

  • @Flydog57 不是骗人的,但还是很有帮助的。
  • 为什么需要检测这个?这听起来像是一个 X-Y 问题。如果安装了 Excel,你会做什么不同的事情?您可以尝试打开 Excel 文档并明智地处理故障吗?
  • @CodyGray 我对问题进行了一些澄清

标签: c# c++ windows winapi office365


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2011-02-25
    相关资源
    最近更新 更多