在访问Outlook 2010的电子邮件时遇到COMException异常

5

你好,我正在尝试通过C#控制台应用程序访问Outlook 2010中的电子邮件。

Visual Studio已经以管理员权限启动,并且我已经添加了对Microsoft.Office.Interop.Outlook v14.0.0.0的引用并将其用作Outlook。

我的代码如下:

Console.Write("starting");
Outlook.Application app = new Outlook.Application();
Outlook.NameSpace mapiNameSpace = app.GetNamespace("MAPI");
Outlook.MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
Console.WriteLine(((Outlook.MailItem)myInbox.Items[0]).Subject);
Console.WriteLine("readline:");
Console.ReadLine();

第二行代码会抛出一个错误信息:
Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

你知道有什么解决方案吗?


2
请尝试阅读以下内容:http://support.microsoft.com/kb/870655 - Dor Cohen
我仍然得到相同的错误。在更改注册表键后,我应该重新启动吗? - Niklas
如果没有运行Outlook实例,我现在可以创建一个新的Outlook应用程序。我以非管理员权限启动了Visual Studio。 - Niklas
是的,我现在可以创建一个Outlook实例了,可能是注册表键影响了异常。 - Niklas
3个回答

7

这是由于进程权限问题导致的。请以管理员身份运行Visual Studio和Outlook。

简单解决方案。以管理员身份运行两个应用程序或以普通权限级别运行两个应用程序。

祝好, Rameez Ali


这比在注册表中胡乱操作要好得多。 - Chris

5
尝试阅读以下内容:http://support.microsoft.com/kb/870655 原因: 如果许多COM+应用程序在不同的用户帐户下运行(这些用户帐户在“该用户”属性中指定),计算机就无法分配内存以创建新用户的桌面堆。因此,该进程无法启动。
解决方法: 要解决此问题,请修改以下注册表子键的值: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

1
非常有帮助的答案。如果链接失效,您能否添加相关更改到注册表键中? - fuchs777
我曾经遇到过类似的情况。我确认使用相同权限模型(都是管理员或都是普通用户)同时运行Visual Studio(或应用程序)和Outlook可以解决这个问题。但是我没有在注册表中测试过这个解决方法。(已在Outlook 2016上测试过) - juFo
文章中提到要添加512,但我的设置为768:ObjectDirectory=\Windows SharedSection=1024,20480,768。我注意到ServerDll设置为sxssrv:ServerDll=sxssrv。我认为这是注册表中的默认配置,因为我没有更改它。我想知道512是什么意思? - Junior Mayhé

0

以下步骤可能会有所帮助...

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems - Windows

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16

ASP.net用户必须存在于管理工具/计算机管理/用户中。


对于32位(x86),创建此文件夹: C:\Windows\System32\config\systemprofile\Desktop--> 添加网络服务

Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 给予写入权限。

在 Web.config 中更改 impersonate=true,

在 Windows Server 2003 的 IIS 中选择账户为 NETWORK SERVICE。

在 DCOMCONFIG 中将身份更改为交互式用户。

此外,对于特定目录,请赋予所有权限。


Internet选项 - 高级选项卡。滚动到底部,取消选中名为“检查发布者证书吊销”的项目。

注册表: CLSID:{0006F03A-0000-0000-C000-000000000046} 在HKEY_CLASSES_ROOT\CLSID\的此键下,添加一个字符串值AppID =与IDs相同的值Eg:{0006F03A-0000-0000-C000-000000000046}

然后在HKEY_CLASSES_ROOT\AppID\下添加一个字符串值:RunAs = Interactive User

右键单击CLSID和APPID,权限,安全性,并编辑启动和访问权限以添加并授予Network Service和Interactive完全权限。


禁用所有其他 Outlook 加载项:Outlook 工具菜单 | 选项 | 其他选项卡 | 高级选项 | COM 加载项 | 取消选中项目。如果这解决了问题,则逐个重新启用一个加载项,直到问题再次出现。


为IIS用户授予"C:\WINDOWS\TEMP"文件夹的读/写访问权限。 所有DLL应放置在C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接