我们正在使用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即将加载加载项时断开网络电缆连接。但我们无法重现这个问题。
感谢任何帮助。
答案 0 :(得分:0)
提前请求MAPI会话通常是一个坏主意,因为它可能尚未正确登录。为什么不在实际需要的那一刻要求会话?