Рекомендации по автоматизации Office на стороне сервера

Применяется к
Office Products Access 2010 Excel 2010 Microsoft Outlook 2010 PowerPoint 2010 Microsoft Word 2010 Project Professional 2010 Project Standard 2010 Visio Standard 2010 Visio Professional 2010 Microsoft OneNote 2010 InfoPath 2010 Access 2013 Excel 2013 InfoPath 2013 Outlook 2013 PowerPoint 2013 Visio Professional 2013 Visio Standard 2013 Word 2013 Access 2016 Excel 2016 Outlook 2016 PowerPoint 2016 Visio Professional 2016 Visio Standard 2016 Word 2016 Office 365

Сводка

Разработчики могут использовать автоматизацию в Microsoft Office для создания пользовательских решений, использующих возможности и функции, встроенные в продукт Office. Хотя такая программная разработка может быть реализована в клиентской системе с относительной легкостью, может возникнуть ряд сложностей, если автоматизация выполняется из серверного кода, например Microsoft Active Server Pages (ASP), ASP.NET, DCOM или службы Windows NT.

В этой статье рассматриваются сложности, с которыми могут столкнуться разработчики. В этой статье также предлагаются альтернативы автоматизации, которые могут ускорить производительность. Однако разработчикам следует помнить, что предложения, приведенные в этой статье, предназначены только для информационных целей. Корпорация Майкрософт не рекомендует и не поддерживает серверную автоматизацию Office.

Примечание

В этом контексте распространяемый компонент ядра СУБД Access и среда выполнения Access считаются компонентами Microsoft Office. Термин "серверная сторона" также применяется к коду, который выполняется на рабочей станции Windows, если код выполняется с рабочей станции Windows, отличной от интерактивной станции пользователя, выполнившего вход. Например, код, запущенный планировщиком задач в учетной записи SYSTEM, выполняется в той же среде, что и серверный код ASP или код DCOM. Поэтому могут возникнуть многие проблемы, которые описаны в этой статье. Дополнительные сведения о рабочих станциях Windows и COM см. в разделах "Дополнительные сведения" и "Ссылки".

Дополнительные сведения

Все текущие версии Microsoft Office были разработаны, протестированы и настроены для запуска в качестве продуктов конечных пользователей на клиентской рабочей станции. Предполагается интерактивный рабочий стол и профиль пользователя. Они не обеспечивают уровень повторного входа или безопасность, необходимые для удовлетворения потребностей серверных компонентов, предназначенных для автоматического запуска.

Корпорация Майкрософт в настоящее время не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого автоматического, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и службы NT), так как Office может работать нестабильно и (или) взаимоблокировка при запуске Office в этой среде.

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

Проблемы с использованием серверной автоматизации Office

Разработчики, которые пытаются использовать Office в серверном решении, должны знать о пяти основных областях, в которых Office ведет себя иначе, чем ожидалось из-за среды. Если код должен успешно выполняться, необходимо устранить эти проблемы и максимально свести к минимуму их последствия. Внимательно учитывайте эти проблемы при сборке приложения. Одно решение не может решить все проблемы. Для разных конструкций требуется по-разному определять приоритеты элементов.

  • Удостоверение пользователя. Приложения Office предполагают удостоверение пользователя при запуске приложений, даже если служба автоматизации запускает приложения. Приложения пытаются инициализировать панели инструментов, меню, параметры, принтеры и некоторые надстройки на основе параметров в кусте реестра пользователей для пользователя, который запускает приложение. Многие службы выполняются под учетными записями без профилей пользователей (например, учетной записью SYSTEM или учетными записями IWAM_[имя_сервера]). Таким образом, Office может неправильно инициализироваться при запуске. В этом случае Office возвращает ошибку для функции CreateObject или Функции CoCreateInstance. Даже если приложение Office можно запустить, другие функции могут работать неправильно, если профиль пользователя не существует.
  • Взаимодействие с рабочим столом. Приложения Office предполагают, что они выполняются на интерактивном рабочем столе. В некоторых случаях для правильной работы некоторых функций автоматизации может потребоваться сделать приложения видимыми. Если возникает непредвиденная ошибка или для выполнения функции требуется неуказанное значение параметра, Office предназначен для того, чтобы предложить пользователю модальное диалоговое окно с запросом, что пользователь хочет сделать. Модальное диалоговое окно на неинтерактивном рабочем столе нельзя закрыть. Поэтому поток перестает отвечать (зависает) на неопределенный срок. Хотя некоторые методики программирования могут помочь снизить вероятность возникновения этой проблемы, эти методы не могут полностью предотвратить проблему. Само по себе это делает запуск приложений Office из серверной среды рискованным и неподдерживаемой.
  • Повторное использование и масштабируемость. Серверные компоненты должны быть высокоцентрированными, многопотоковые COM-компоненты с минимальными издержками и высокой пропускной способностью для нескольких клиентов. Приложения Office почти во всех отношениях полностью противоположны. Приложения Office не являются повторными серверами автоматизации на основе STA, которые предназначены для предоставления разнообразных, но ресурсоемких функций для одного клиента. Приложения обеспечивают небольшую масштабируемость в качестве решения на стороне сервера. Кроме того, приложения имеют фиксированные ограничения на важные элементы, такие как память. Их нельзя изменить с помощью конфигурации. Что еще более важно, приложения используют глобальные ресурсы, такие как сопоставленные файлы памяти, глобальные надстройки или шаблоны и общие серверы службы автоматизации. Это может ограничить количество экземпляров, которые могут работать одновременно, и привести к условиям гонки, если приложения настроены в многопользовательской среде. Разработчикам, планирующим одновременно запускать несколько экземпляров любого приложения Office, необходимо рассмотреть возможность создания пула или сериализации доступа к приложению Office, чтобы избежать потенциальных взаимоблокировок или повреждения данных.
  • Устойчивость и стабильность: Office 2000, Office XP, Office 2003 и Office 2007 используют технологию установщика Microsoft Windows (MSI), чтобы упростить установку и самостоятельное восстановление для конечного пользователя. В MSI представлена концепция "установка при первом использовании". Это позволяет динамически устанавливать или настраивать компоненты во время выполнения для системы или чаще для конкретного пользователя. В серверной среде это снижает производительность и повышает вероятность появления диалогового окна с запросом на утверждение установки или предоставление диска установки. Хотя это предназначено для повышения устойчивости Office как продукта конечного пользователя, реализация office возможностей MSI в серверной среде является контрпродуктивной. Кроме того, стабильность Office в целом не может быть гарантирована при запуске Office на стороне сервера, так как она не была разработана и не протестирована для этого типа использования. Использование Office в качестве компонента службы на сетевом сервере может снизить стабильность этого компьютера и, следовательно, снизить стабильность всей сети.
  • Безопасность на стороне сервера. Приложения Office никогда не предназначались для использования на стороне сервера. Поэтому приложения Office не учитывают проблемы безопасности, с которыми сталкиваются распределенные компоненты. Office не проверяет подлинность входящих запросов. Office также не защищает вас от непреднамеренного запуска макросов или запуска другого сервера, на котором могут выполняться макросы, из кода на стороне сервера. Не открывайте файлы, отправленные на сервер с анонимного веб-сайта. В зависимости от параметров безопасности, которые были установлены в последний раз, сервер может запускать макросы в контексте администратора или системы с полными привилегиями и, следовательно, может скомпрометировать вашу сеть. Кроме того, Office использует множество клиентских компонентов (таких как Simple MAPI, WinInet и MSDAIPP), которые могут кэшировать сведения о проверке подлинности клиента для ускорения обработки. Если Office автоматизирован на стороне сервера, один экземпляр может обслуживать несколько клиентов. Если сведения о проверке подлинности кэшированы для этого сеанса, один клиент может использовать кэшированные учетные данные другого клиента. Таким образом, клиент может получить не предоставленные разрешения на доступ, олицетворяя других пользователей.

Помимо технических проблем, необходимо также рассмотреть проблемы с лицензированием. Текущие рекомендации по лицензированию не позволяют использовать приложения Office на сервере для обслуживания клиентских запросов, если только эти клиенты не имеют лицензированных копий Office. Использование серверной автоматизации для предоставления функций Office нелицензированных рабочих станций не распространяется на лицензионное соглашение с конечным пользователем (EULA).

Помимо этих проблем, при попытке автоматизировать Office на стороне сервера может возникнуть одна из следующих распространенных ошибок:

  • Функция CreateObject и функция CoCreateInstance возвращают одно из следующих сообщений об ошибках во время выполнения и не могут быть запущены для службы автоматизации.
    Сообщение 1

    Примечание

    Ошибка времени выполнения "429": компонент ActiveX не может создать объект

    Сообщение 2

    Примечание

    Ошибка времени выполнения "70": отказано в разрешении

    Сообщение 3

    Примечание

    CO_E_SERVER_EXEC_FAILURE (0x80080005): сбой выполнения сервера

    Сообщение 4

    Примечание

    E_ACCESSDENIED (0x80070005): доступ запрещен

  • При открытии документа Office появляется одно из следующих сообщений об ошибке.
    Сообщение 1

    Примечание

    Ошибка времени выполнения "5981" (0x800A175D): не удалось открыть хранилище макросов

    Сообщение 2

    Примечание

    Ошибка времени выполнения "1004": сбой метода "~" объекта "~"

  • Функция CreateObject и функция CoCreateInstance перестают отвечать на запросы и никогда не завершают работу или возвращаются долго. На некоторых серверах создание выполняется быстро, но в журнале событий Windows отображаются ошибки 1004, указывающие на то, что приложение было остановлено.

  • Некоторые функции неожиданно завершаются сбоем или перестают отвечать на запросы на неопределенный срок из-за оповещения пользователя или другого диалогового окна, требующего внимания пользователя.

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

Другие проблемы или сообщения могут появиться в дополнение к перечисленным здесь, но эти проблемы обычно возникают в результате пяти основных проблем, перечисленных ранее в этой статье. 

Альтернативы серверной автоматизации

Корпорация Майкрософт настоятельно рекомендует разработчикам найти альтернативы автоматизации Office, если им нужно разрабатывать серверные решения. Из-за ограничений, связанных с структурой Office, изменений в конфигурации Office недостаточно для устранения всех проблем. Корпорация Майкрософт настоятельно рекомендует ряд альтернатив, которые не требуют установки Office на стороне сервера и могут выполнять наиболее распространенные задачи более эффективно и быстрее, чем автоматизация. Прежде чем использовать Office в качестве серверного компонента в проекте, рассмотрите альтернативные варианты.

Большинство задач автоматизации на стороне сервера связаны с созданием или редактированием документов. Office 2007 поддерживает новые форматы файлов Open XML, которые позволяют разработчикам создавать, редактировать, читать и преобразовывать содержимое файлов на стороне сервера. Эти форматы файлов используют пространство имен System.IO.Package.IO в Microsoft .NET 3.x Framework для редактирования файлов Office без использования самих клиентских приложений Office. Это рекомендуемый и поддерживаемый метод обработки изменений в файлах Office из службы.

Форматы файлов Open XML являются общедоступным стандартом. 

Корпорация Майкрософт предоставляет пакет SDK для управления форматами файлов Open XML из платформы .NET 3.x Framework. Дополнительные сведения о пакете SDK и о том, как использовать пакет SDK для создания или редактирования файлов Open XML, см. на следующих веб-сайтах Microsoft Developer Network (MSDN):

Документация по пакету SDK Open XML

Практическое руководство. Управление документами в форматах Office Open XML

Управление Word 2007 Files с помощью объектной модели Open XML (часть 1 из 3)

Управление Word 2007 Files с помощью объектной модели Open XML (часть 2 из 3)

Управление Word 2007 Files с помощью объектной модели Open XML (часть 3 из 3)

Управление excel 2007 и PowerPoint 2007 Files с помощью объектной модели Open XML (часть 1 из 2)

Управление excel 2007 и PowerPoint 2007 Files с помощью объектной модели Open XML (часть 2 из 2)

Создание решений для создания документов Server-Side с помощью объектной модели Open XML (часть 1 из 2)

Создание решений для создания документов Server-Side с помощью объектной модели Open XML (часть 2 из 2)

При потоковой передаче файлов Open XML из ASP или из ASP.NET необходимо указать правильный тип MIME для содержимого, которое выполняется потоковая передача. Список типов MIME для файлов Office 2007 см. на следующем веб-сайте:

Типы MIME формата файлов Office 2007 для потоковой передачи содержимого HTTP

Если вы используете только клиенты до Office 2007 и не хотите использовать Open XML в решении, можно использовать другие не двоичные форматы файлов Office, такие как HTML, XML и RTF. Затем эти файлы можно передавать в клиент с помощью типа MIME, чтобы результирующий текст отображалось в Office. Документ можно изменить, сохранить и даже вернуть на сервер с помощью ASP на сервере.

Для получения дополнительных сведений о любом из этих разделов и примеров, показывающих, как их реализовать, щелкните следующие номера статей, чтобы просмотреть статьи в базе знаний Майкрософт:

198703 Автоматизация Excel на стороне клиента VBScript

Запрос и обновление данных Excel с помощью ADO из ASP

286023 Использование компонента VB ActiveX для автоматизации Word из Интернета Обозреватель
 

Если вашей организации требуется создание двоичных форматов office 97, Office 2000, Office XP и Office 2003 на стороне сервера, сторонние поставщики предлагают компоненты, которые могут помочь вам. Корпорация Майкрософт не предоставляет такие компоненты, поэтому вам потребуется либо самостоятельно создать решение, либо приобрести его у стороннего поставщика. Доступно множество различных сторонних продуктов. Вы должны изучить каждое решение, чтобы наилучшим образом соответствовать поставщику бизнес-потребностям.

Если вы хотите создать собственное решение, которое изменяет форматы двоичных файлов Office 97, Office 2000, Office XP и Office 2003 напрямую, вы можете бесплатно получить спецификации формата файлов в соответствии с условиями обещания microsoft Open Specification (OSP). Техническая поддержка документации или создаваемых вами продуктов отсутствует, но документация доступна. 

Серверные решения также могут разрешить пользователям отправлять файлы, а затем предоставить серверу отрисовку файлов для просмотра в Интернете или на других носителях. Корпорация Майкрософт в настоящее время работает над предложением таких функций и предоставляет раннюю версию этой возможности в Microsoft службы Excel.

службы Excel — это новая серверная технология, которая входит в состав Microsoft Office SharePoint Server 2007 и позволяет загружать, вычислять и отображать книги Excel в Office SharePoint Server 2007. Дополнительные сведения о службы Excel см. на следующих веб-сайтах Microsoft Developer Network (MSDN):

Обзор службы Excel

Пошаговое руководство. Разработка пользовательского приложения с помощью веб-служб Excel

Создание бизнес-приложений с помощью форматов службы Excel и Office Open XML Word Automation Services — это новое приложение службы в SharePoint Server 2010. службы автоматизации Word обеспечивают автоматическое преобразование документов на стороне сервера в форматы, поддерживаемые клиентским приложением Microsoft Word.

Общие сведения о службах автоматизации Word

Знакомство со службами автоматизации Word. Необходимо оценить, какие из вариантов, описываемых в этой статье, соответствуют вашим потребностям и как лучше всего развернуть решение. Информация, представленная в этой статье, не гарантирует устранение всех проблем для всех клиентов. Перед развертыванием решения рекомендуется тщательно протестировать решение.