VSTO Outlook 2007 Addin Startup抛出System.Runtime.InteropServices.COMException(0x80020009):无法完成操作。你没有联系

时间:2011-08-23 09:58:39

标签: c# com outlook vsto mapi

我们正在使用VSTO构建Outlook 2007加载项。我们在addin的初始化逻辑中有代码,它检索与Application.Session关联的MAPIOBJECT。有问题的代码如下:

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        try
        {
            var addIn = Globals.ThisAddIn;
            var application = addIn.Application;
            var mapiObject = application.Session.MAPIOBJECT;
        }
        catch (Exception e)
        {
            // HANDLE ERROR
        }
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
                        // ...
    }

    // Other VSTO generated code

}

此代码大多数时候都像魅力一样。但是,当我们尝试从Session属性访问MAPIOBJECT属性时,我们遇到以下错误:

System.Runtime.InteropServices.COMException (0x86220009): Cannot complete the operation. You are not connected.
  at Microsoft.Office.Interop.Outlook._NameSpace.get_MAPIOBJECT()
  at MyTestAddIn.ThisAddIn.ThisAddIn_Startup(object, System.EventArgs) in C:\foo\MyTestAddIn\ThisAddIn.cs:line 19

我们无法理解为什么代码在大多数情况下都能正常工作,但却失败了。我们认为此问题是由于网络中断/用户脱机工作。我们尝试了多种连接状态组合,有意在Outlook中脱机工作,以便在Outlook即将加载加载项时断开网络电缆连接。但我们无法重现这个问题。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

提前请求MAPI会话通常是一个坏主意,因为它可能尚未正确登录。为什么不在实际需要的那一刻要求会话?