从外部C#应用程序获取现有的Outlook加载项信息

时间:2014-11-24 15:29:57

标签: c# .net vsto outlook-addin

我已经有一个基于C#的Outlook Addin应用程序,可能会也可能不会安装在我的客户端版本的Outlook上。是否可以确定是否从同一客户机上运行的外部C#应用程序安装和启用了插件?如果是这样,怎么样?

非常感谢提前! 约翰

2 个答案:

答案 0 :(得分:1)

如果您是通过MSI进行安装,则可以检查是否已使用Windows Installer API进行安装(有关详情MSDN,请参阅P/Invoke.net has a C# example)。

答案 1 :(得分:0)

最后,以下代码解决了我的问题:

using System.Reflection;
using System.Runtime.InteropServices;
using Outlook = Microsoft.Office.Interop.Outlook;
using Microsoft.Office.Core;

...

public static bool IsOutlookAddinEnabled(string addinName)
{
    bool isEnabled = false;

    Outlook.Application outlookApp = null;

    if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Length > 0)
    {
        outlookApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
    }
    else
    {
        outlookApp = new Outlook.Application();
        Outlook.NameSpace nameSpace = outlookApp.GetNamespace("MAPI");
        nameSpace.Logon("", "", Missing.Value, Missing.Value);
        nameSpace = null;
    }

    try
    {
        COMAddIn addin = outlookApp.COMAddIns.Item(addinName);
        isEnabled = addin.Connect;
    }
    catch { }

    return isEnabled;
}

非常感谢Mitch的快速反应。