Рекомендации по автоматизации 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 нелицензированным рабочим станциям.

В дополнение к этим проблемам, при попытке автоматизации 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):

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

Работа с документами Office форматов Open XML

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

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

Работа с Files Word 2007 с помощью объектной модели 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 см. на следующем веб-сайте:

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

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

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

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

Как запрашивать и обновлять данные Excel с помощью ADO из ASP

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

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

Если вы хотите создать собственное решение, которое напрямую изменяет двоичные форматы файлов Office 97, Office 2000, Office XP и Office 2003, вы можете получить спецификации форматов файлов бесплатно в соответствии с условиями Microsoft Open Specification Promise (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 — это новое приложение-служба в SharePoint Server 2010. Службы автоматизации Word обеспечивают автоматическое преобразование документов на стороне сервера в форматы, поддерживаемые клиентским приложением Microsoft Word.

Обзор служб автоматизации Word

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