Я разрабатываю приложение для 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.Application
, когда у вас есть прекрасное полеwordApplication
? Также вы можете получить не тот экземпляр. Просто используйте это поле и выполнитеwordApplication.Quit(); wordApplication = null;
. Я бы не стал беспокоиться об этой последней ссылке, которую вы упомянули, не понимаю, как она здесь применима. - person MickyD   schedule 27.06.2019static
вызывает проблемы, поскольку, если вы специально не обнулите эти экземпляры, они не имеют права на сбор и выпуск базовой ссылки COM. - person TnTinMn   schedule 27.06.2019wordApplication
?? В одной части кода вы используете поле, а в другой — ROT. Когда вы выходите из Word, вам нужно установитьwordApplication
наnull
. Вам нужно будет воссоздать его позже, прежде чем использовать его - person MickyD   schedule 27.06.2019dynamic
переменные с COM вместо кастинга; необходимость знать тип; или добавьте ссылки на библиотеки взаимодействия и/или COM. Однако вы не получите IntelliSense - person MickyD   schedule 27.06.2019