我已经有一个基于C#的Outlook附加应用程序,可能会或可能不会在我的客户端版本的Outlook上安装。是否有可能通过在同一客户机上运行的外部C#应用程序来确定插件是否安装并启用?如果是这样,怎么样?从外部C#应用程序获取现有的Outlook附加信息
非常感谢提前! John
我已经有一个基于C#的Outlook附加应用程序,可能会或可能不会在我的客户端版本的Outlook上安装。是否有可能通过在同一客户机上运行的外部C#应用程序来确定插件是否安装并启用?如果是这样,怎么样?从外部C#应用程序获取现有的Outlook附加信息
非常感谢提前! John
如果您是通过MSI安装的,可以检查它是否已使用Windows Installer API安装(有关更多信息,请参见MSDN,P/Invoke.net has a C# example)。
最后,下面的代码解决我的问题:
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。不幸的是我没有通过MSI安装。不过,我确实设法将最终符合我需求的答案放在一起。 – 2014-11-26 14:25:32