Исключение из Word.ApplicationClass.Activedocument внезапно - PullRequest
0 голосов
/ 07 января 2019

У меня есть одна строка кода в проекте надстройки Word VSTO, которая раньше работала, но внезапно перестала работать:

Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;

Прежде чем он просто возвратил объект Document, как и предполагалось, я мог читать и манипулировать им без проблем. Но теперь он вызывает исключение System.Runtime.InteropServices.COMException. «Слово столкнулось с проблемой». Очень полезно. Исключение содержит HRESULT 0x800A13E9, который мне пока не помог. Недостаточно памяти или что-то? ИДК.

Новое поведение кажется началось в канун Нового года (не уверен, так как я не использовал надстройку в течение последних нескольких недель), и оно началось, когда надстройка была установлен, т.е. ничего в коде не было изменено, перекомпилировано или переустановлено, чтобы это произошло. С тех пор я перестроил проект, думая, что срок действия сертификата истек или что-то в этом роде, но ошибка по-прежнему возникает.

Возможно, стоит отметить, что я все еще могу получить доступ к другим свойствам экземпляра приложения. Например, эта строка не выдает исключение:

int numDocuments = Globals.ThisAddIn.Application.Documents.Count;

Но затем, когда я перебираю коллекцию Documents с foreach, она просто пропускает цикл, как будто счетчик равен нулю.

Единственное, о чем я могу думать, это то, что обновление Office (365) сломало что-то, связанное с VSTO. Но где мне вообще начать отлаживать это?


Хорошо, поэтому я попытался создать новую надстройку Word VSTO, не изменяя ни одно из свойств проекта по умолчанию, но добавив одну ленту с одной кнопкой и следующий метод:

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    try
    {
        var x = Globals.ThisAddIn.Application.ActiveDocument;
    }
    catch  (Exception ex)
    {
        ;
    }
}

Выдает точно такое же исключение при получении свойства ActiveDocument. Однако я заметил, что при загрузке надстройки возникает еще два исключения, а также при загрузке исходной надстройки (которая раньше работала нормально):

Exception thrown: 'System.Deployment.Application.DeploymentException' in System.Deployment.dll
Exception thrown: 'System.Security.Cryptography.CryptographicException' in Microsoft.VisualStudio.Tools.Applications.Hosting.dll

Они не препятствуют загрузке и запуску надстройки, но, может быть, они все равно связаны с проблемой? Я не знаю, были ли они также брошены в прошлом году до появления проблемы.

Однако у меня есть пара надстроек Excel, которые по-прежнему нормально работают с той же версией VSTO, Visual Studio и Office, и они не выдают два вышеупомянутых исключения при загрузке. Так что проблема, похоже, специфична для Word.


И теперь я попытался откатиться до версии 3610 Office 365, октябрьского выпуска, который определенно работал раньше, поэтому я думаю, что , вероятно, не является проблемой, представленной обновлением Office. Это что-то еще. Возможно.

Не то чтобы это мне очень помогало, но, по крайней мере, я исключил это. Возможно.

Ответы [ 4 ]

0 голосов
/ 26 марта 2019

Microsoft исправила проблему
Microsoft выпустила обновление Office, чтобы исправить эту проблему.
В версии Office 1902 (сборка 11328.20158) проблема исправлена ​​на моей стороне.

0 голосов
/ 08 января 2019

Что ж, откат к предыдущей версии Windows 10 (1803 в моем случае, по-видимому) устранил проблему, и я не могу воспроизвести ее в данный момент, поэтому я отмечу это как решенную на данный момент.

Хотя я до сих пор не знаю, в чем именно заключалась , я по крайней мере узнал в своем исследовании, что нажатие кнопки «Проверить наличие обновлений» в Windows 10 мгновенно превращает вас в бета-тестера для Microsoft. Например, они намеренно отправили вас в нестабильную серию обновлений без какого-либо уведомления, не говоря уже о предупреждении о том, что вы собираетесь устанавливать обновления, которые они еще не считают готовыми к выпуску.

В любом случае, я надеюсь, что они получили хорошую телеметрию от многих, многих часов, пытаясь сделать все, что я мог придумать, так что, возможно, проблема будет решена к тому времени, когда обновление будет навязано мне. Если нет, то я вернусь, чтобы снова задать тот же вопрос. По крайней мере, я буду знать, где начать искать причину.

0 голосов
/ 11 января 2019

Похоже, что проблема вызвана обновлением Windows 10 за октябрь 2018 (или ноябрь). У затронутых клиентов были специальные региональные настройки Windows: Пример: «Английский (Швейцария)».

Решение:
Измените формат региональных настроек Windows на «Английский (Великобритания)» или «Английский (США)»

Редактор VBA также больше не работает правильно для затронутых клиентов (без установленных надстроек). Ошибка «Word обнаружил проблему» (ошибка Visual Basic 5097) возникла непосредственно при открытии. Та же ошибка, которая возникает в C # для Application.ActiveDocument

0 голосов
/ 07 января 2019

Из моего опыта: когда я закрывал активный документ, я обновлял меню ленты в соответствии с активным документом. Если закрывающим документом был Последний документ, я не смог прочитать ни одного свойства

Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;

и я столкнулся с той же проблемой, что и вы.

всякий раз, когда я закрываю любой документ, я проверяю

if(Globals.ThisAddIn.Application.Documents.Count = 1){ 
LastActiveDocument = true;
}

И когда я обновляю меню Ribbion, я проверяю

if(!LastActiveDocument){
// then only read any property of Active document
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...