0

我们具有将联系人添加到 Outlook 的功能。

如果一个正在运行,我只是想对现有的 Outlook 进程执行此操作,如果没有运行,我只想打开它。

我得到错误:

由于以下错误,检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败: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 的生产环境中也会出现这个错误吗?

4

1 回答 1

0

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

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

  1. 您已在 PC 上安装了 Office 2010 的 Click2Run 版本。事实上,Office 2010 的 Click2Run 版本不支持自动化。有关详细信息,请参阅Office 2010 与加载项的即点即用兼容性。您还可以找到如何:验证 Outlook 是否是计算机上的即点即用应用程序一文。
  2. 您的程序和 MS Outlook 都必须以管理员或普通权限级别运行。他们应该享有相同的特权。您可能会发现如何在 UAC 文章下将应用程序自我提升到高权限级别很有帮助。

请注意,Outlook 是一个单例。即,如果它已经在运行,当您创建一个新的 Outlook 应用程序实例时,您将获得一个指向已运行实例的指针。

于 2015-05-20T12:05:13.667 回答