Search code examples
c#winformsoffice-interopcomexception

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


I am developing a Windows application where I manipulate Word Application. More specific, I am opening a Word Document but when I quit it and try to open another Word Document this Error comes out.

How to handle

System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) at Microsoft.Office,Word.ApplicationClass.set_Visible(Boolean Prop)**

If I don't quit the Word Application this error does not come out.

Below I show you the functions that I open and quit the Word Application.

    //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());
            }



Solution

  • I finally figured it out what is the problem. The main problem was that when I quit it and try to open another Word Document,which opening another Word Document means get/create an Object of Word Application. In my case wordApp != null, after finalizing the application, so I had to create another Word Application Object and return it for the case.

      //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;
            }
    
        }
    

    With CloseWordApp() remain the same.