Как обрабатывать System.Runtime.InteropServices.COMException (0x800706BA): RPC-сервер недоступен. (Исключение из HRESULT: 0x800706BA) - PullRequest
0 голосов
/ 27 июня 2019

Я занимаюсь разработкой приложения для 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());
            }


1 Ответ

1 голос
/ 27 июня 2019

Скорее всего, исключение вызывается следующей строкой кода:

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