簡體   English   中英

如何處理 System.Runtime.InteropServices.COMException (0x800706BA):RPC 服務器不可用。 (來自 HRESULT 的異常:0x800706BA)

[英]How to handle System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

我正在開發一個 Windows 應用程序,我在其中操作 Word 應用程序。 更具體地說,我正在打開一個 Word 文檔,但是當我退出它並嘗試打開另一個 Word 文檔時,會出現此錯誤。

怎么處理

System.Runtime.InteropServices.COMException (0x800706BA):RPC 服務器不可用。 (來自 HRESULT 的異常:0x800706BA)在 Microsoft.Office、Word.ApplicationClass.set_Visible(Boolean Prop)**

如果我不退出 Word 應用程序,則不會出現此錯誤。

下面我將向您展示我打開和退出 Word 應用程序的功能。

    //function to open word Document located in a specific path
        public static void openWordDocument(string fileName)
        {
            try
            {
                wordApplication.Visible = true;
                string filePath = myPath + fileName;
                WordApi.Document docx = wordApplication.Documents.Open(filePath);
            }
            catch (Exception ex)
            {
                MyLogger.Error(ex.ToString());
            }
        }



//function to quit wordApplication 
  public static void CloseWordApp() {

            try {
                Object wordAppObject = Marshal.GetActiveObject("Word.Application");
                WordApi.Application wordApp = (WordApi.Application)wordAppObject;  //cast Object to its actual type
                wordApp.Quit();
            }
            catch (Exception ex) {
                 MyLogger.Error(ex.ToString());
            }


我終於弄清楚是什么問題。 主要問題是當我退出並嘗試打開另一個Word文檔時,打開另一個Word文檔意味着獲取/創建Word應用程序的對象。 在我的情況下, wordApp != null最終確定了應用程序后,因此我不得不創建另一個Word應用程序對象並針對情況返回它。

  //open word Document located in a specific path
    public static void openWordDocument(string fileName)
    {
        try
        {
            wordApplication = createWordApplicationObject(wordApplication);
            wordApplication.Visible = true;
            string filePath = myPath + fileName;
            WordApi.Document docx = wordApplication.Documents.Open(filePath);
        }
        catch (Exception ex)
        {
            MyLogger.Error(ex.ToString());
        }
    }
private static WordApi.Application createWordApplicationObject(WordApi.Application wordApp)
    {
        WordApi.Application wordAppFirstTime;
        WordApi.Application wordApp1;
        if (wordApp == null)
        {
            wordAppFirstTime = new WordApi.Application();
            return wordAppFirstTime;

        }
        else
        {
            wordApp1 = new WordApi.Application();
            return wordApp1;
        }

    }

CloseWordApp()保持不變。

以下代碼行很可能觸發了異常:

wordApplication.Visible = true;

您需要確保COM服務器處於活動狀態。 因為退出后該對象變得不可用。 我建議將此類對象引用設置為null,以便稍后我們可以檢查應用程序對象是否仍然存在。 例如:

try
{
    if (wordApplication == null)
    {
        wordApplication = new Word.Application();
    }
    wordApplication.Visible = true;
    string filePath = myPath + fileName;
    WordApi.Document docx = wordApplication.Documents.Open(filePath);
}
catch (Exception ex)
{
    MyLogger.Error(ex.ToString());
}

我想添加一個適合我的解決方案。 我們在 .net web 服務中遇到了這個問題,以及其他錯誤,例如 Word.Documents.Open() 上的“遠程過程調用失敗”。 我將列出我們嘗試過的所有事情,並以解決方案結束。 我們嘗試了:

  • 確保 RPC 服務已啟動。 Word 沒有損壞,可以正常打開,包括我們打開的文件。
  • 重新啟動托管 web 應用程序的服務器和服務。
  • 回滾在停止工作的同一天發生的 windows 更新。
  • 卸載了殺毒軟件。
  • 我們將代碼隔離到第三方應用程序以驗證它是導致問題的 open() 方法,並且還使用了不同的文件。 我們創建了一個 win form 應用程序和一個 consol 應用程序。 我們以 win admin、普通帳戶以及運行 web 應用程序的帳戶運行該小應用程序。
  • 我們運行了 procMon。
  • 我們對word進行了修復。
  • 我們全部安裝了 Office,我們嘗試了 32 位和 64 位版本

最終解決方案:我們刪除了運行 web 應用程序的用戶配置文件。

4天就知道了。 我以為我會與世界分享我的痛苦。 哈哈

在發布這些行時,我們不確定為什么本地配置文件會創建此問題。

暫無
暫無

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

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