以编程方式禁用Outlook Addin

时间:2013-02-05 09:45:39

标签: c# office-interop outlook-addin

我正在开发一个Outlook Addin,它使用Web服务进行身份验证,以从数据库中获取数据并将数据存储在数据库中。 当插件启动时,它会查询Web服务以确定安装的插件版本是否为当前版本,如果没有,则通过

从Outlook卸载插件
Application.COMAddIns.Item("foo").Connect = false;

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

每当保存凭据时,这些凭据用于查询Web服务以检查插件是否是正确的版本。如果不是那么COM插件将从Outlook断开连接。

每当查询Web服务用于其他目的时,首先会进行查询以检查插件是否是正确的版本。如果不是那么COM插件将从Outlook断开连接。

据我所知,只能从Outlook.Application对象断开插件,我目前只能从我的Addin对象访问它。

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

1 个答案:

答案 0 :(得分:2)

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

可以通过功能区的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;
    }