Outlook错误检索COM类工厂

时间:2015-05-20 05:00:36

标签: outlook uac com-automation

我们有一项功能可以向Outlook添加联系人。

我只想在现有的Outlook流程中运行,如果没有运行则打开它。

我收到错误:

  

使用CLSID检索组件的COM类工厂   {0006F03A-0000-0000-C000-000000000046}由于以下原因而失败   错误:80080005服务器执行失败(来自HRESULT的异常:   0x80080005(CO_E_SERVER_EXEC_FAILURE))。如果进程没有   已经开始了。

注意:以下方法被调用2次。

我的代码是:

Private Sub InitObject()
    If (Process.GetProcessesByName("OUTLOOK").Count > 0) Then
        objOutlook = DirectCast(Marshal.GetActiveObject("Outlook.Application"), Outlook.Application)
        'If objOutlook Is Nothing Then
    Else
        objOutlook = New Outlook.Application()
    End If
    If objNamespace Is Nothing Then
        objNamespace = objOutlook.GetNamespace("MAPI")
        objNamespace.Logon("", "", False, False)
    End If

    If objFolder Is Nothing Then
        objFolder = objNamespace.GetDefaultFolder(10)
    End If
End Sub

我在这上面写了几篇关于管理员权限的帖子。现在我正在运行没有管理员权限的Visual Studio。我是神圣的,这个错误会在生产中看到我们不使用Visual Studio吗?

1 个答案:

答案 0 :(得分:0)

您在有问题的PC上安装了什么Outlook版本?它是Outlook 2010的Click2Run版本吗?

无论如何,我看到两个可能的原因:

  1. 您已在PC上安装了Office 2010的Click2Run版本。事实是Office 2010的Click2Run版本不支持自动化。有关详细信息,请参阅Office 2010 Click-to-Run compatibility with add-ins。您也可以找到How to: Verify Whether Outlook Is a Click-to-Run Application on a Computer文章。
  2. 您的程序和MS Outlook必须以管理员或普通权限级别运行。他们应该享有同样的特权。您可能会发现How to self-elevate an application to a high privilege level under UAC文章很有帮助。
  3. 请注意,Outlook是一个单身人士。即如果它已经在运行,那么在创建新的Outlook应用程序实例时,您将获得指向已在运行的实例的指针。