以编程方式禁用Outlook加载项

本文关键字:Outlook 加载项 方式禁 编程 | 更新日期: 2023-09-27 17:57:35

我正在开发一个Outlook Addin,它可以通过web服务进行身份验证,从数据库中获取数据并将数据存储在数据库中。当加载项启动时,它会查询web服务,以确定安装的加载项的版本是否为当前版本,如果不是,则通过从Outlook卸载加载项

Application.COMAddIns.Item("foo").Connect = false;

为了查询web服务,它必须进行身份验证。凭据是从Windows注册表中的加密字符串中检索的。这些凭据来自一个Form对象,该对象在加载项启动时或对web服务进行查询时运行,并且用户名和/或密码无法从注册表中检索,通常是由于有人删除了所述值。

每当保存凭据时,这些凭据都会用于查询web服务,以检查加载项的版本是否正确。如果不是,则COM加载项将与Outlook断开连接。

每当出于其他目的查询web服务时,都会首先进行查询,以检查加载项的版本是否正确。如果不是,则COM加载项将与Outlook断开连接。

据我所知,断开加载项的连接只能从Outlook.Application对象完成,到目前为止,我只能从我的加载项对象访问该对象。

我需要弄清楚的是,当我不在我的加载项对象中时,我如何断开Outlook加载项的连接或以其他方式禁用它?

以编程方式禁用Outlook加载项

我设法通过Ribbon的上下文访问COM对象,所以我通过创建一个以COMAddIn对象为参数的公共静态方法来解决这一切,从那里我可以做任何我想做的事情:)

对所有加载项的引用可以通过Ribbon的Context属性引用,如下所示:

Microsoft.Office.Core.COMAddIns comaddins = ((this.Context as Outlook.Explorer).Application.COMAddIns.Application as Outlook.Application).COMAddIns;

静态方法如下:

public static void ThisAddIn_CheckVersion(Microsoft.Office.Core.COMAddIn ThisAddIn)
    {
        var rk = Registry.CurrentUser.OpenSubKey("Software''Microsoft''Office''Outlook''Addins''My Outlook Add-in");
        if (rk.GetValue("Username") == null || rk.GetValue("Password") == null)
        {
            new EditSettingsForm(ThisAddIn).Show();
            return;
        }
        var sc = new MyWebService.WebServiceClient();
        sc.ClientCredentials.UserName.UserName = (rk.GetValue("Username") == null ? null : rk.GetValue("Username").ToString());
        sc.ClientCredentials.UserName.Password = (rk.GetValue("Password") == null ? null : Encryptor.Decrypt(rk.GetValue("Password").ToString()));
        if (sc.GetMyOutlookAddinVersionNumber() != "TESTING")
        {
            System.Windows.Forms.MessageBox.Show("The version of My Outlook 2013 Add-in you're using is too old. Please update to the latest version at http://www.foo.bar/");
            ThisAddIn.Connect = false;
        }
        sc = null;
    }