Ошибка класса VSTO 4 ServerDocument - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть надстройка Word VSTO, которая сохраняет документ в защищенном сетевом ресурсе. Процесс сохранения выполняется посредством олицетворения учетной записи Active Directory, которая имеет доступ к защищенному общему ресурсу. Часть этого - копирование документа в общий сетевой ресурс и удаление настроек (другие части включают обновление базы данных - не имеет отношения к рассматриваемой проблеме).

SwitchIdentity()
File.Copy(localPath, remotePath, True)
If ServerDocument.IsCustomized(remotePath) Then
    ServerDocument.RemoveCustomization(remotePath)
End If
SwitchBackIdentity()

Методы класса ServerDocument выдают исключения (даже пытаясь только .RemoveCustomization не работает с документом, который имеет настройку).

Исключения:

The type initializer for 'MS.Utility.EventTrace' threw an exception.. Source: WindowsBase. StackTrace:
at MS.Utility.EventTrace.EasyTraceEvent(Keyword keywords, Event eventID)
at System.IO.Packaging.Package.Open(Stream stream, FileMode packageMode, FileAccess packageAccess, Boolean streaming)
at System.IO.Packaging.Package.Open(Stream stream, FileMode packageMode, FileAccess packageAccess)
at Microsoft.Office.Tools.OfficeOpenXmlAppInfoDocument.Microsoft.VisualStudio.Tools.Applications.Runtime.IAppInfoDocument.SetDocument(String fileName, Byte[] data, FileAccess fileAccess)
at Microsoft.VisualStudio.Tools.Applications.AppInfoDocumentFactory.GetAppInfoDocument(String documentPath, Byte[] bytes, FileAccess access)
at Microsoft.VisualStudio.Tools.Applications.ServerDocument.Initialize(Byte[] bytes, String documentPathOrFileType, FileAccess access, Boolean throwOnPreviousVersion)
at Microsoft.VisualStudio.Tools.Applications.ServerDocument.Initialize(Byte[] bytes, String documentPathOrFileType, FileAccess access)
at Microsoft.VisualStudio.Tools.Applications.ServerDocument..ctor(String documentPath, FileAccess access)
at Microsoft.VisualStudio.Tools.Applications.ServerDocument.IsCustomized(String documentPath)
at DMS.ActiveDocument.SaveActiveDocument(). InnerException Message: Requested registry access is not allowed.. InnerException Source: mscorlib

и другое исключение:

Failed to save remotely (ID=123). 
The type initializer for 'MS.Utility.EventTrace' threw an exception.. 
Source: ADDINNAME. StackTrace:    at ADDINNAME.CLASSNAME.METHODNAME()

Это происходит последовательно.

Это происходит в Windows 10 Office 2016 или Windows 7 Office 2007. Сама надстройка изначально была разработана с VS 2008 VSTO 3 для Windows 7 Office 2007 и была перенесена с VS 2017 для использования VSTO 4 (автоматизированный процесс).

Кажется, что раздел реестра «Warmpup» работает нормально, пока выдается ошибка (надстройка загружается правильно все время). Мы исследовали, было ли это связано с проблемой DNS, но, похоже, это происходит на ПК с конфликтами в IP-адресах или без них. Мы также безуспешно пытались переустановить VSTO 4 на зараженных компьютерах.

Кажется, что проблема возникает внезапно и может исчезнуть через несколько дней.

Любая помощь приветствуется. Также обратите внимание, что у нас есть маленький пользователь из расчета около 1000 в день, использующий приложение - это случается только с несколькими пользователями время от времени.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Мы думаем, что нашли обходной путь для этого. Некоторые люди предлагают поставить этот код для решения аналогичной проблемы (пожалуйста, прочитайте до конца):

https://www.infragistics.com/community/forums/f/ultimate-ui-for-windows-forms/94401/problem-with-saving-word-excel-documents-docx-xlsx

, который, кажется, работает для нас.

0 голосов
/ 27 апреля 2018

В Visual Studio 2010 Tools for Office Runtime есть две разные версии класса ServerDocument. Версия, которую вы должны использовать, зависит от целевого .NET Framework приложения, в котором вы хотите использовать класс:

  • Для приложений, предназначенных для .NET Framework 4 или .NET Framework 4.5, используйте класс Microsoft.VisualStudio.Tools.Applications.ServerDocument в сборке Microsoft.VisualStudio.Tools.Applications.ServerDocument.dll.
  • Для приложений, нацеленных на .NET Framework 3.5, используйте класс Microsoft.VisualStudio.Tools.Applications.ServerDocument в сборке Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0.dll.

Для получения дополнительной информации см. Управление документами на сервере с помощью класса ServerDocument .

...