簡體   English   中英

如何修復“無法轉換類型為‘Microsoft.Office.Interop.Outlook.ApplicationClass’的 COM 對象/RPC 服務器不可用”?

[英]How can I fix “Unable to cast COM object of type 'Microsoft.Office.Interop.Outlook.ApplicationClass' / The RPC server is unavailable”?

在特定機器上運行時,我收到上述錯誤,該錯誤會暫停我的應用程序中的活動。 當我在自己的機器上運行它時,沒有出現這樣的錯誤。

也許“ RPC 服務器不可用”是問題的症結所在,但是在應用程序之前運行(並且仍在我的機器上運行)之后,什么會導致它彈出?

在更多上下文中(顯示似乎有價值/重要的內容),錯誤消息是:

System.InvalidCastException:無法將“Microsoft.Office.Interop.Outlook.ApplicationClass”類型的 COM 對象轉換為接口類型“Microsoft.Office.Interop.Outlook._Application”。 此操作失敗,因為 IID 為“{00063001-0000-0000-C000-000000000046}”的接口的 COM 組件上的 QueryInterface 調用因以下錯誤而失敗:RPC 服務器不可用。 (來自 HRESULT 的異常:0x800706BA)。 在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) 在 Microsoft.Office.Interop.Outlook.ApplicationClass.CreateItem(OlItemType ItemType) 在 RoboReporter2017.mailExceptionLoggingStringAssignenotification(Object objSrc, IntPtr pCPCMD, Boolean& pfNeedsRelease) String rptName) 在 RoboReporter2017.RoboRprtrLib.GenerateAndSaveDueReports() 在 RoboReporter2017.FormMain.RunDueReports() 在 RoboReporter2017.FormMain.FormMain_Load(Object sender, EventArgs e) 。 . .

************** 加載的程序集 **************** -------------------- -------------------- Microsoft.Office.Interop.Outlook 程序集版本:12.0.0.0 Win32 版本:12.0.4518.1014 代碼庫:file:///C:/Windows /assembly/GAC/Microsoft.Office.Interop.Outlook/12.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Outlook.dll --------------- ----------------- office 程序集版本:12.0.0.0 Win32 版本:12.0.4518.1014 代碼庫:file:///C:/Windows/assembly/GAC/office/12.0。 0.0__71e9bce111e9429c/office.dll ----------------------------------------

在 err msg 中引用的那台機器上的方法是:

internal static void EmailMessageToAssignee(string unit, string notificationRecipient, string rptName)
{
    string saveLocation = @"\\storageblade\cs\REPORTING\RoboReporter";
    var subject = string.Format("Your {0} report for {1} generated by Robo Reporter 2017", rptName, unit);
    var body = string.Format("Your {0} report for {1} was generated by Robo Reporter 2017 and can be found in the usual location in the shared network folder ({2})", rptName, unit, saveLocation);

    Application app = new Application();
    MailItem mailItem = app.CreateItem(OlItemType.olMailItem);
    mailItem.To = notificationRecipient;
    mailItem.Subject = subject;

    mailItem.HTMLBody = string.Format(@"<html><body><img src='http://www.proactusa.com/bla/images/pa_logo_notag.png' alt='Platypus logo' width='199' height='130' ><p>{0}</p></body></html>", body);

    mailItem.Importance = OlImportance.olImportanceNormal;
    mailItem.Display(false);
    mailItem.Send();
}

我注意到我的項目引用中的 Microsoft.Office.Interop.Outlook 版本是 12.0.0.0,與 err msg 中列出的“加載的程序集”中列出的版本相同。

更新

考慮到 Outlook 未運行可能是問題所在,我編寫了以下代碼:

private static void StartOutlookIfNotRunning()
{
    string OutlookFilepath = @"C:\Program Files (x86)\Microsoft 
Office\Office12\OUTLOOK.EXE";
    if (Process.GetProcessesByName("OUTLOOK").Count() > 0) return;
    Process process = new Process();
    process.StartInfo = new ProcessStartInfo(OutlookFilepath);
    process.Start();
}

...改編自here ,但在實施之前,我關閉了 Outlook 並運行了該應用程序,以查看如果 Outlook 未運行,我是否會在我的機器上收到相同的錯誤消息。 但不是! 它自己重新啟動 Outlook,不需要我花哨的 StartOutlookIfNotRunning() 方法。

所以這不是問題,反正...

請參閱FIX:當您運行發出“突發加載”樣式激活請求並通過 DCOM 調用服務器組件的應用程序時的錯誤消息: "0x800706ba" 或 "0x800706bf"

您何時何地嘗試自動化 Outlook?

Microsoft 當前不建議也不支持從任何無人參與的非交互式客戶端應用程序或組件(包括 ASP、ASP.NET、DCOM 和 NT 服務)自動化 Microsoft Office 應用程序,因為 Office 可能表現出不穩定的行為和/或在此環境中運行 Office 時出現死鎖。

如果您正在構建一個在服務器端上下文中運行的解決方案,您應該嘗試使用已為無人值守執行安全的組件。 或者,您應該嘗試找到至少允許部分代碼在客戶端運行的替代方案。 如果您使用服務器端解決方案中的 Office 應用程序,該應用程序將缺少許多成功運行所需的功能。 此外,您將面臨整體解決方案穩定性的風險。 Office 服務器端自動化注意事項一文中閱讀有關此內容的更多信息。

好吧,雖然 Eugene Astafiev 的建議非常合理,但在我兩次與不祥之兆相撞的情況下

System.InvalidCastException:無法將“Microsoft.Office.Interop.Outlook.ApplicationClass”類型的 COM 對象轉換為接口類型“Microsoft.Office.Interop.Outlook._Application”。

我在另一個論壇上用 Eugene Astafiev 的建議解決了這個問題

regtlib msoutl.olb

從 Office App 文件夾內提升的命令提示符。

對我來說,問題是在某些機器上正常工作,而在另一台機器上不工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM