Вопросы серверной автоматизации Office

Применимо к: Access 2010Microsoft Office Access 2007Microsoft Office Access 2003 Больше

Аннотация


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

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

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

Дополнительная информация


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

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

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

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

Разработчикам серверных решений для приложений Office необходимо знать о пяти крупных областях, в которых поведение Office отличается от ожидаемого в силу используемой среды. Для успешной работы программ эти отклонения должны быть обязательно учтены, а их влияние минимизировано. Внимательно изучите эти вопросы при создании приложения. Все эти проблемы невозможно устранить одним решением. В зависимости от задач проекта приоритетность элементов будет изменяться.
  • Идентификация пользователей. Приложения Office, даже в случае запуска в автоматическом режиме, предполагают наличие определенного пользователя. Так, например, инициализация панелей инструментов, меню, параметров, принтеров и некоторых надстроек выполняется на основе конфигурации запустившего приложение пользователя, которая хранится в соответствующем кусте реестра. Многие службы запускаются из учетных записей которые не содержат пользовательских профилей (например, учетная запись SYSTEM или IWAM_[servername]). Поэтому при запуске Office может возникнуть проблема инициализации. При возникновении данной проблемы Office возвращает ошибку функции CreateObject или CoCreateInstance. Даже после успешного запуска приложения Office при отсутствии пользовательского профиля другие функции могут работать некорректно.
  • Взаимодействие с рабочим столом. Работа приложений Office предполагает наличие интерактивного рабочего стола. В некоторых условиях для корректной работы определенных функций автоматизации приложение необходимо сделать видимым. Office сконструирован таким образом, что всякий раз при возникновении ошибки или необходимости указания параметра выводится соответствующее модальное диалоговое окно. Модальное диалоговое окно на не интерактивном рабочем столе не может быть отвергнуто , что приводит к остановке (зависанию) потока на неопределенное время. Даже если некоторые методы написания программ позволяют снизить возможность возникновения такой ситуации, полностью исключить ее нельзя. Уже только этот факт делает запуск приложений Office из серверного окружения рискованным и непредсказуемым.
  • Возможность повторного входа и масштабируемость. Серверные компоненты должны представлять собой многопоточные СОМ-компоненты с хорошо развитыми возможностями повторного входа, минимальным использованием ресурсов и высокой производительностью для нескольких клиентов. Приложения Office во многих отношениях обладают прямо противоположными характеристиками. Их возможности повторного входа не развиты, они представляют собой серверы на базе STA, сконструированные для предоставления разнообразных, но ресурсоемких функциональных возможностей одному клиенту. Приложения обладают ограниченной масштабируемостью с точки зрения серверного решения. Кроме того, приложения имеют разные ограничения на важные элементы, например память. Их невозможно изменить в настройках. Что еще более важно, приложения используют глобальные ресурсы, такие как проецируемые в память файлы, глобальные надстройки или шаблоны и общие сервера автоматизации. Это может накладывать ограничения на число запускаемых одновременно экземпляров, что может привести к условиям гонки, если приложения настроены в среде с несколькими клиентами. Если планируется одновременный запуск нескольких экземпляров приложения Office, для предотвращения зависания программы и повреждения данных необходимо рассмотреть возможность объединения в пул или последовательного удовлетворения запросов на доступ к данному приложению.
  • Устойчивость и стабильность. Office 2000, Office XP, Office 2003 и Office 2007 для упрощения процесса установки и самовосстановления используют установщик Windows (MSI). Одним из принципов работы установщика MSI является «установка при первом использовании». Он позволяет динамически устанавливать и настраивать функции во время работы системы или, чаще, для конкретного пользователя. В серверном окружении это, с одной стороны, снижает производительность, а с другой — увеличивает вероятность того, что появится диалоговое окно с требованием одобрить установку или вставить необходимый диск. Таким образом, повышая устойчивость пакета Office как продукта для конечного пользователя, функции установщика Windows имеют обратный эффект в серверном окружении. Помимо всего прочего, стабильность 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 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 и том, как его использовать для создания или редактирования файлов Open XML, см. на следующих сайтах Сети разработчиков Майкрософт (MSDN):
Документация по Open XML SDK
http://msdn.microsoft.com/ru-ru/library/bb226703.aspx
Инструкции. Работа с документами Office в форматах Open XML
http://technet.microsoft.com/ru-ru/library/aa982683.aspx
Работа с файлами Word 2007 с помощью объектной модели Open XML(Часть 1 из 3)
http://msdn.microsoft.com/ru-ru/library/bb656295.aspx
Работа с файлами Word 2007 с помощью объектной модели Open XML(Часть 2 из 3)
http://technet.microsoft.com/ru-ru/library/bb739835.aspx
Работа с файлами Word 2007 с помощью объектной модели Open XML(Часть 3 из 3)
http://msdn.microsoft.com/ru-ru/library/bb727374.aspx
Работа с файлами Excel 2007 и PowerPoint 2007 с помощью объектной модели Open XML (Часть 1 из 2)
http://msdn.microsoft.com/ru-ru/library/bb739834.aspx
Работа с файлами Excel 2007 и PowerPoint 2007 с помощью объектной модели Open XML (Часть 2 из 2)
http://msdn.microsoft.com/ru-ru/library/bb727373.aspx
Разработка решения по созданию документов на сервере с помощью объектной модели Open XML (Часть 1 из 2)
http://msdn2.microsoft.com/ru-ru/library/bb735940.aspx
Разработка решения по созданию документов на сервере с помощью объектной модели Open XML (Часть 2 из 2)
http://msdn2.microsoft.com/ru-ru/library/bb735939.aspx
Для получения дополнительных сведений и примеров использования Open XML в .NET 3.0 Framework щелкните следующие номера статей базы знаний Майкрософт:
932921 Как использовать компоненты .NET Framework 3.0 для создания и дальнейшего переноса документа Office Word 2007 и рабочей книги Office Excel 2007 на клиентский компьютер
 
931866 Как использовать формат файла Office XML и компоненты архивации .NET Framework 3.0 для создания простой рабочей книги Excel 2007 или простого документа Word 2007
 
Пользователи, использующие более ранние версии Office (например, Office 2000, Office XP, и Office 2003), могут просматривать и редактировать файлы формата Open XML после загрузки и установки бесплатного пакета обеспечения совместимости, размещенного на сайте Майкрософт. Для загрузки и установки пакета обеспечения совместимости обратитесь на веб-сайт корпорации Майкрософт по следующему адресу:
Форматы файла Пакета обеспечения совместимости Microsoft Office для Word, Excel и PowerPoint 2007
http://office.microsoft.com/ru-ru/products/HA101686761033.aspx
При передаче файлов формата Open XML от ASP или ASP.NET необходимо предоставить правильный тип Многоцелевого расширения почты Интернета (MIME) для передаваемого содержимого. Со списком типов MIME для файлов Office 2007 можно ознакомиться по следующему адресу:Если все ваши пользователи используют приложения, выходившие до Office 2007, и вы не хотите вводить в решение обязательное использование форматов Open XML, можно воспользоваться любым другим недвоичным форматом файла Office, например HTML, XML и RTF. Вы можете передавать эти файлы в клиентское приложение Office с помощью MIME-типа. Для редактирования, сохранения и возвращения документа на сервер необходим только ASP на сервере.

Дополнительные сведения по этим рекомендациям и примеры их реализации можно найти в следующих статьях базы знаний Майкрософт:
270906 Как использовать возможности ASP для генерирования документа в формате RTF и его открытия в Microsoft Word
 
198703 Как автоматизировать Excel из VBScript на компьютере клиента
 
199841 Как вывести результаты ASP с помощью Excel в Internet Explorer с типами MIME
 
260239 Как отформатировать содержимое ячеек при создании файла Excel с помощью страницы ASP
 
278973 Пример использования технологии ADO для чтения и записи данных в книге Excel
 
286023 Как использовать компонент Visual Basic ActiveX для автоматизации Word из Internet Explorer
 
288130 Как использовать технологию ASP для построения электронной таблицы в формате XML на экране клиентского компьютера
 
Если ваш бизнес требует создания файлов двоичного формата Office 97, Office 2000, Office XP и Office 2003, существуют предложения компонентов от независимых разработчиков, которые могут помочь вам. Майкрософт не предоставляет подобных компонентов, поэтому вам необходимо либо создать свое собственное решение, или приобрести такое у независимых разработчиков. Существует ряд продуктов от независимых разработчиков. Рекомендуется рассмотреть все возможные предложения независимых разработчиков и выбрать оптимальные решения для конкретных деловых потребностей.
Если вы хотите создать собственное решение для прямого редактирования файлов Office 97, Office 2000, Office XP, Office 2003 двоичного формата, вы можете бесплатно скачать спецификации к данным файловым форматам в соответствии с условиями Обязательства Майкрософт об открытой технической документации/Microsoft Open Specification Promise (OSP). Для документации или создаваемых вами продуктов не существует технической поддержки, однако сама документация находится в открытом доступе. Дополнительные сведения см. на следующей веб-странице.В серверных решениях также может потребоваться позволить пользователям загружать файлы на сервер для их последующего просмотра в Интернете или других средах. В настоящее время Майкрософт работает над созданием подобных возможностей и предлагает раннюю версию такой возможности в службах Microsoft Excel Services.

Службы Excel Services — это новая серверная технология, входящая в Microsoft Office SharePoint Server 2007, которая позволяет вам загружать, проводить расчеты и отображать рабочие книги Excel на сервере Office SharePoint Server 2007. Для получения дополнительных сведений о технологии Excel Services посетите следующую веб-страницу узла MSDN:
Обзор технологии Excel Services
http://msdn.microsoft.com/ru-ru/library/ms546696.aspx
Краткий обзор. Разработка пользовательского приложения с помощью веб-служб Excel(Excel Web Services)
http://msdn2.microsoft.com/ru-ru/library/ms519100.aspx
Создание бизнес-приложений с помощью технологии Excel Services и форматов Office Open XML
http://msdn.microsoft.com/ru-ru/library/cc540662.aspx
Службы автоматизации Word, это новое служебное приложение в SharePoint Server 2010. Службы автоматизации Word обеспечивают автоматическое конвертирование документов в форматы, поддерживаемые клиентским приложением Microsoft Word.

Обзор служб автоматизации Word
http://msdn.microsoft.com/ru-ru/library/ee558830.aspx
Выберите наиболее подходящий из предложенных в этой статье методов и продумайте разворачивание созданного решения. Приведенные в данной статье рекомендации не гарантируют решения всех возникающих проблем. Тщательно протестируйте решение перед его разворачиванием.