背景是我有一个旧的加载项,用于安装其他加载项,并在ThisAddIn_Startup上删除旧的加载项。一切看起来都很好,但找到了一台解决方案不起作用的计算机。
我成功地安装和删除了加载项,但是外接程序不会在第一次加载时加载。
private static void EnableNewPlugin()
{
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
object index = "NewAddin";
Office.COMAddIn addin = null;
addin = app.COMAddIns.Item(ref index);
addin.Connect = false;
addin.Connect = true;
}因此,这种方法在所有其他计算机上都有效,但问题是在这台pc上,它似乎没有在app.COMAddIns列表中找到。那么,我的问题是如何以编程方式重新启动COMAddIns列表?
发布于 2015-05-19 10:08:50
更新集合的COMAddins方法用于刷新COMAddins注册表中的COM外接程序列表。
但是,为什么需要在代码中创建一个新的Outlook应用程序实例?您是否开发Outlook外接程序?如果是这样,则可以使用外接程序类的Application属性。或者,您可以使用Marshal类的GetActiveObject方法在运行时获得正在运行的Outlook实例的实例。有关详细信息,请参阅如何:获取和登录到Outlook实例。
此外,我建议打破调用链,在单独的代码行上声明每个属性或方法调用。因此,您将能够立即释放所有底层COM对象。使用System.Runtime.InteropServices.Marshal.ReleaseComObject在完成使用后释放Outlook对象。然后在Visual中将变量设置为Nothing (C#中为null),以释放对对象的引用。请参阅MSDN中的系统释放对象文章中有关这一点的更多信息。
发布于 2015-05-19 08:41:49
如果有人面临同样的问题,这似乎对我有效。
COMAddIns.Update();https://stackoverflow.com/questions/30319583
复制相似问题