You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在VSTO Outlook插件与Office 365插件间互相检测对方是否激活?

这个问题确实挺常见的——当你同时维护VSTO和Office 365(Web)插件时,避免用户看到重复插件、实现平滑过渡是很重要的。下面分两种场景给你具体的解决方案:

从Office 365插件检测Windows VSTO插件是否安装

因为Web Add-in运行在浏览器/ WebView环境中,无法直接读取Windows注册表(VSTO插件的安装信息通常存在这里),所以得靠「间接标记」或者双向通信的方式实现:

  • 方法1:让VSTO插件留下可检测的标识
    你可以让VSTO插件在Outlook的可访问区域留下一个唯一标记,然后Web Add-in去读取这个标记:

    1. VSTO端操作:在插件启动时,创建一个隐藏邮件(比如放在专门的隐藏文件夹,或者「已删除邮件」里并标记为保留),给它添加自定义属性(比如VSTO_Addin_Installed = "True"),或者直接在邮件内容里写入唯一的标识字符串。
    2. Web Add-in端操作:使用Office.context.mailbox.getCallbackTokenAsync获取访问令牌,然后调用Microsoft Graph API查询这个隐藏邮件。如果能找到对应的标识,就说明VSTO插件已安装。
      小贴士:记得定期检查这个标记是否存在,防止用户误删后导致检测失效。
  • 方法2:直接双向通信(仅限Outlook 2019及以上版本)
    如果你面向的是较新版本的Outlook,可以利用Office的跨插件通信能力:

    1. VSTO端:注册一个自定义函数,用于返回插件的安装状态。
    2. Web Add-in端:通过Office.context.mailbox.item.invokeCustomFunction调用VSTO暴露的函数,直接获取安装状态结果。
从VSTO插件检测Office 365插件是否安装

这个场景相对简单,因为VSTO可以直接访问Outlook对象模型中的Web Add-ins列表:

  • 在VSTO代码里,遍历Application.WebAddIns集合,检查目标Office 365插件的ID是否存在(还能顺便检查是否启用):
    using Outlook = Microsoft.Office.Interop.Outlook;
    using System;
    
    public bool CheckOffice365AddinStatus(string targetAddinId)
    {
        Outlook.Application outlookApp = Globals.ThisAddIn.Application;
        foreach (Outlook.WebAddIn addin in outlookApp.WebAddIns)
        {
            if (addin.Id.Equals(targetAddinId, StringComparison.OrdinalIgnoreCase))
            {
                return addin.IsEnabled; // 返回插件是否启用,也可以直接返回true表示已安装
            }
        }
        return false;
    }
    
    注意:这个方法要求Outlook版本在2016及以上,因为WebAddIns属性是从Outlook 2016开始引入的。
额外注意事项
  • 权限配置:Web Add-in调用Graph API需要在manifest.xml中声明对应的权限(比如Mail.Read),否则会被拒绝访问。
  • 版本兼容:如果你的用户还在使用Outlook 2013这类旧版本,那WebAddIns属性不可用,得换方法1的标记方案。
  • 用户体验优化:检测到重复插件后,可以在界面上提示用户禁用其中一个,或者自动隐藏当前插件的核心功能,只显示过渡引导。

内容的提问来源于stack exchange,提问作者Shubh

火山引擎 最新活动