Word2007: исключение нарушения прав доступа не было обработано при выполнении Selection.Find.Execute

Я прочитал много сообщений об этой ужасной и раздражающей ошибке: «Исключение нарушения прав доступа не было обработано». Но только один пост на Word2007 и вызывающая команда "Выделение.Найти.Выполнить". Предлагаемое решение состояло в том, чтобы переустановить Word2007, и это немного тривиально!

Я пытаюсь объяснить свое окружение.

У меня есть небольшое приложение, написанное на C# с использованием WinForms и вызовом Word через InteropServices (word.dll) для создания нового документа в Word (поднятие экземпляра Word2007). Весь код работает на .NET Framework 3.5. Внутри кода C# я создаю документ, а затем ищу в нем что-то, что можно заменить.

Программа только на некоторых машинах выдает указанную ошибку, а на других работает корректно.

это код фрагмента:

WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
WordApp.Visible = false;
...
this.copDoc = WordApp.Documents.Add(ref template,
                                            ref missing,
                                            ref missing,
                                            ref isVisible);

                this.copDoc.Activate();
...
WordApp.Selection.Find.Execute(ref textData, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

if (WordApp.Selection.Find.Found)
{
    Range r = WordApp.Selection.Range;
    r.Text = DateTime.Today.ToLongDateString();
}
...

Когда код выполняет строку, выделенную жирным шрифтом, он вызывает исключение «Нарушение прав доступа» с сообщением «Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена». Если я прокомментирую этот код, документ был создан, и это может означать, что исключение не относится ко всему Word, а только к какой-то конкретной конфигурации в нем.

Вот исключение:

'EdAg.exe': Loaded 'C:\Windows\assembly\GAC\Microsoft.Office.Interop.Word\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll', Binary was not built with debug information.
'EdAg.exe' (Managed): Loaded 'C:\Windows\assembly\GAC\Microsoft.Office.Interop.Word\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Word.dll'
First-chance exception at 0x45c7a6f3 in EdAg.exe: 0xC0000005: Access violation.
First-chance exception at 0x6b815095 in EdAg.exe: 0xC0000005: Access violation reading location 0x45c7a6f3.
First-chance exception at 0x6b815095 in EdAg.exe: 0xC0000005: Access violation reading location 0x45c7a6f3.

Может ли кто-нибудь предложить мне более рациональный способ вместо переустановки Word 2007?


person robob    schedule 21.01.2010    source источник


Ответы (1)


Является ли проблема постоянной на машинах с исключением или прерывистой?

Если непротиворечиво, я не знаю решения, но сначала проверьте, отключен ли на этих машинах UAC (т. е. функция, добавленная в Vista, которая подсказывает вам, когда думает, что что-то пытается изменить ваш компьютер) (или напротив рабочие).

В связи с этим вы можете получить подобные нарушения безопасности доступа при использовании COM, когда пытаетесь поговорить из непривилегированного приложения в привилегированное (например, запущенное «как администратор»). Например, если кто-то запустил ваше приложение от имени администратора (возможно, даже из VS, работающего от имени администратора), а Word уже работал НЕ от имени администратора, тогда Windows не сможет запустить другой экземпляр Word и не позволит им общаться. , поэтому COM выйдет из строя.

person Andy Jacobs    schedule 21.01.2010
comment
Ваше решение очень интересно, но теперь я уже решил проблему восстановления установки Word 2007. Я получу решение, которое вы мне сказали, на будущее. Спасибо - person robob; 23.01.2010