Используя Outlook Interop, я создал небольшое приложение для подключения к почтовому ящику Outlook и сбора 30 электронных писем, а затем их отображения в сетке. Когда вы дважды щелкните по электронной почте в сетке, он откроет электронное письмо в Outlook.Outlook Interop «Сервер RPC недоступен» при открытии электронной почты
В приложении: - Открыть электронное письмо, свести его к минимуму. Затем откройте другой, он откроется нормально. - Откройте электронное письмо, закройте его. Затем откройте другой, вы получите «Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA) '.
Я заметил, что когда это произойдет, значок Outlook в системном лотке исчезнет.
Я попытался создать новый экземпляр Microsoft.Office.Interop.Outlook.Application и пространства имен и добавив параметр реестра здесь: http://blogs.msdn.com/b/rgregg/archive/2008/10/27/application-shutdown-changes-in-outlook-2007-service-pack-2-beta.aspx
Я бегу Office 2010.
Кто-нибудь знает как обойти это?
Imports Microsoft.Office.Interop.Outlook
Imports System.Runtime.InteropServices
Imports System.Reflection
Public Class Form1
Private m_outlookApplication As Application 'Outlook
Private m_nameSpace As Microsoft.Office.Interop.Outlook.NameSpace 'Outlook's namespace
Private WithEvents m_inboxItems As Items 'All Outlook inbox items
Private WithEvents m_calendarItems As Items 'All Outlook calendar items
Private m_outlookInstalled As Boolean = False 'indicates whether Outlook is installed on computer
Private m_emails As New List(Of OutlookInboxEmail) 'used to store inbox e-mail messages for grid view control
Private m_inboxFolder As MAPIFolder 'Outlook inbox folder
Private m_calendarFolder As MAPIFolder 'Outlook calendar
Private m_explorer As Explorer 'Outlook window explorer
Private m_name As String = String.Empty 'the name user who is connected
Public Sub New()
InitializeComponent()
connectToOutlook()
loadInbox()
End Sub
Private Sub connectToOutlook()
m_outlookApplication = New Microsoft.Office.Interop.Outlook.Application
m_nameSpace = m_outlookApplication.GetNamespace("MAPI")
m_nameSpace.Logon(Missing.Value, Missing.Value, False, True)
Dim connectionMode = m_nameSpace.ExchangeConnectionMode
End Sub
Private Sub loadInbox()
Try
'get inbox folder
m_inboxFolder = m_nameSpace.GetDefaultFolder(OlDefaultFolders.olFolderInbox)
'get inbox messages
m_inboxItems = m_inboxFolder.Items
m_emails.Clear()
'display recent messages first
m_inboxItems.Sort("ReceivedTime", True)
Dim numberOfEmailsToLoad As Integer = 30
'set displayed values for each message
For Each currentItem As Object In m_inboxItems
Dim emailItem = TryCast(currentItem, MailItem)
If Not emailItem Is Nothing Then
'check whether its e-mail
If emailItem.MessageClass = "IPM.Note" Then
'set email
Dim inboxEmail As New OutlookInboxEmail
inboxEmail.SenderName = emailItem.SenderName
inboxEmail.Subject = emailItem.Subject
inboxEmail.ReceivedTime = emailItem.ReceivedTime.ToString("dd MMMM HH:mm")
inboxEmail.Body = emailItem.Body
inboxEmail.Unread = emailItem.UnRead
inboxEmail.Email = emailItem
m_emails.Add(inboxEmail)
numberOfEmailsToLoad = numberOfEmailsToLoad - 1
If numberOfEmailsToLoad <= 0 Then
Exit For
End If
End If
End If
Next
If m_explorer Is Nothing Then
Try
m_explorer = m_outlookApplication.ActiveExplorer
Catch ex As System.Exception
End Try
End If
If GridControl1.DataSource Is Nothing Then
GridControl1.DataSource = Nothing
GridControl1.DataSource = m_emails
End If
GridControl1.RefreshDataSource()
Catch exception As System.Exception
End Try
End Sub
''' <summary>
''' Opens email in Outlook
''' </summary>
''' <remarks></remarks>
Private Sub openEmail()
If Not GridView1.GetFocusedDataSourceRowIndex < 0 Then
Dim selectedEmail = TryCast(m_emails(GridView1.GetFocusedDataSourceRowIndex), OutlookInboxEmail)
If Not selectedEmail Is Nothing Then
Try
If Process.GetProcessesByName("OUTLOOK").Count() = 0 Then
End If
selectedEmail.Email.Display()
selectedEmail.Unread = False
selectedEmail.EmailImage = My.Resources.Read_16
Catch exception As COMException
End Try
GridControl1.RefreshDataSource()
End If
End If
End Sub
Private Sub GridControlCalendar_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridControl1.DoubleClick
openEmail()
End Sub
End Class
Если вы видите значок на панели задач исчезнет, то исключение ожидаемый результат. Никакого намека на то, почему он решил бросить курить. Посмотрите в журнал приложений Windows для сухарей. –