创建 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 系统不会编组具有不同安全上下文的进程之间的调用。
我有一个与 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 系统不会编组具有不同安全上下文的进程之间的调用。