如何在c#中运行时连接到Outlook 2010?

Jas*_*son 12 email-integration ms-office office-interop outlook-object-model winforms-interop

我想要做的是向winform客户端添加一个"Email To ..."按钮,该客户端打开一个新的Outlook邮件窗口并附加一个文件,以便用户可以转发它.如果outlook还没有运行,我可以让outlook集成工作得很好.这是一个C#.NET 4.0 winforms应用程序,使用Outlook 14.0互操作库,在Windows 7 64位计算机上运行Outlook 2010 32位.由于其他原因,我已将应用程序编译为x86,因此我怀疑它是32/64位问题.这是我的代码:

// Connect to outlook and create a new mail item
var app = new Outlook.Application();
var ns = app.GetNamespace("MAPI");
var mailItem = (Outlook.MailItem)ns.Application.CreateItem(Outlook.OlItemType.olMailItem);

// create the mail item and attach the file
mailItem.To = "";
mailItem.Subject = "Emailing: " + Path.GetFileName(_currentFilePath);
mailItem.Attachments.Add(_currentFilePath, Outlook.OlAttachmentType.olEmbeddeditem);

// show the email dialog window
mailItem.Display(true);
Run Code Online (Sandbox Code Playgroud)

如果outlook没有运行,它可以完美运行.一旦打开,我在第一行尝试创建Outlook.Application对象时收到以下错误:

由于以下错误,检索具有CLSID {0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE)).

任何想法会导致什么?这是某种版本的冲突吗?

Jah*_*mic 19

这是由于该过程的特权.我通常以管理员身份运行Visual Studio,但如果以前没有启动outlook也是admin,则COM调用将失败.

简单解决方案 以管理员身份运行或以普通权限级别运行.


小智 1

我有同样的问题。这是一个安全问题。当您以管理员身份运行 Outlook 时(Shift 右键单击​​)。问题不再存在了。禁用用户帐户控制设置可能会解决该问题。