创建 Outlook 对象时在部署系统上抛出未指定的错误

Unspecified error thrown on deployment system, when creating Outlook object

我有一个与 Outlook 集成的应用程序,仅用于发送带附件的电子邮件 (VB.NET .net v4)。

因为我需要它 运行 多个版本的 Outlook,所以我使用后期绑定。

在我的本地系统和另一个部署系统上,一切正常(Outlook 2016)。

在 3 个特定系统上,我无法创建 "Outlook.Application" 对象,因为抛出了异常,不幸的是,错误没有告诉我任何信息。如果 Outlook 是 运行ning,就会发生这种情况。 (所有系统运行宁胜10)

我正在从网络共享中 运行 安装应用程序,但是我已经尝试从 c: 驱动器和文档目录在本地 运行。还尝试 运行ning 作为管理员。

我尝试过的另一件事是检查 Outlook 是否 运行 获取对象,而不是创建对象,但如果 Outlook 是 运行ning.

,错误仍然存​​在

这是我正在使用的:

Public Class Email

    Public Shared Sub EnviaEmail(ByVal pEnderecoDestino() As String, ByVal pAssunto As String, ByVal pBody As String, Optional ByVal pEnderecoCC() As String = Nothing, Optional ByVal pEnderecoBCC() As String = Nothing, Optional ByVal pAnexos() As String = Nothing)

        Dim objOutlook As Object
        Dim objMensagem As Object
        Dim objEnderecos As Object
        Dim objEndereco As Object
        Dim objAnexos As Object

        Try
            Dim fechaApp As Boolean = False

            If Process.GetProcessesByName("OUTLOOK") Is Nothing Then fechaApp = True

            objOutlook = CreateObject("Outlook.Application")          

            objMensagem = objOutlook.CreateItem(0)

            With objMensagem
                .Subject = pAssunto
                .BodyFormat = 1
                .Body = pBody
            End With

            objEnderecos = objMensagem.Recipients

            For i As Integer = 0 To pEnderecoDestino.Length - 1 Step 1
                If Not String.IsNullOrEmpty(pEnderecoDestino(i)) Then
                    objEndereco = objEnderecos.Add(pEnderecoDestino(i).Trim())
                    objEndereco.Type = 1
                    objEndereco.Resolve()
                End If
            Next i

            If Not pEnderecoBCC Is Nothing Then
                For i As Integer = 0 To pEnderecoBCC.Length - 1 Step 1
                    If Not String.IsNullOrEmpty(pEnderecoBCC(i)) Then
                        objEndereco = objEnderecos.Add(pEnderecoBCC(i).Trim())
                        objEndereco.Type = 3
                        objEndereco.Resolve()
                    End If
                Next i
            End If

            If pEnderecoCC IsNot Nothing Then
                For i As Integer = 0 To pEnderecoCC.Length - 1 Step 1
                    If Not String.IsNullOrEmpty(pEnderecoCC(i)) Then
                        objEndereco = objEnderecos.Add(pEnderecoCC(i).Trim())
                        objEndereco.Type = 2
                        objEndereco.Resolve()
                    End If
                Next i
            End If

            objAnexos = objMensagem.Attachments

            If pAnexos IsNot Nothing Then
                For i As Integer = 0 To pAnexos.Length - 1 Step 1
                    objAnexos.Add(pAnexos(i))
                Next i

            End If


            objMensagem.Send()


            If fechaApp Then objOutlook.Quit()

        Catch ex As COMException

            Select Case ex.ErrorCode

                Case -2147467260
                    Throw New Exception("Permission denied to access MS Outlook", ex.InnerException)

                Case -2147221164
                    Throw New Exception("MS Outlook not installed" , ex.InnerException)

                Case Else
                    Throw ex
            End Select

        Finally
            objAnexos = Nothing
            objEndereco = Nothing
            objEnderecos = Nothing
            objMensagem = Nothing
            objOutlook = Nothing
        End Try
    End Sub

End Class

只有当 Outlook 已经 运行 时您才会看到错误这一事实很可能意味着 Outlook 和您的应用 运行 处于不同的安全上下文中。 Outlook 是单例,因此它会尝试连接到已经 运行 的实例。然而,COM 系统不会编组具有不同安全上下文的进程之间的调用。