Considerações para automatização do servidor do Office

Resumo

Os desenvolvedores podem usar a Automação no Microsoft Office para construir soluções personalizadas que usam as capacidades e as funcionalidades que são incorporadas no produto Office. Embora tal desenvolvimento programático possa ser implementado num sistema de clientes com relativa facilidade, uma série de complicações podem ocorrer se a Automatização ocorrer a partir de código do lado do servidor, como o Microsoft Ative Server Pages (ASP), ASP.NET, DCOM ou um serviço Windows NT. Este artigo discute as complicações que os desenvolvedores podem enfrentar. O artigo também oferece alternativas à Automação que podem acelerar o desempenho. Os desenvolvedores devem estar cientes, no entanto, de que as sugestões que este artigo fornece são apenas para fins informativos. A Microsoft não recomenda nem suporta a automatização do lado do servidor do Office.

Nota

Neste contexto, o Access Database Engine Redistributable e access Runtime são considerados componentes do Microsoft Office. O termo "lado do servidor" também se aplica ao código que está a ser em execução numa estação de trabalho do Windows, se o código estiver a funcionar a partir de uma estação de trabalho do Windows que não seja a estação interativa do utilizador que está ligado. Por exemplo, o código que é iniciado pelo Task Scheduler sob a conta SYSTEM funciona no mesmo ambiente que o código ASP "server-side" ou como código DCOM. Portanto, muitas das questões que este artigo descreve podem ocorrer. Para obter mais informações sobre estações de trabalho do Windows e sobre a COM, consulte a secção "Mais Informações" e a secção "Referências".

Mais Informações

Todas as versões atuais do Microsoft Office foram desenhadas, testadas e configuradas para funcionarem como produtos de utilizador final numa estação de trabalho do cliente. Assumem um ambiente de trabalho interativo e um perfil de utilizador. Não fornecem o nível de reentrância ou segurança necessário para satisfazer as necessidades dos componentes do lado do servidor que são projetados para funcionar sem vigilância. A Microsoft não recomenda, atualmente e não suporta, aplicações de Automatização do Microsoft Office a partir de qualquer aplicação ou componente de cliente não interativa não acompanhado (incluindo ASP, ASP.NET, DCOM e NT Services), porque o Office pode apresentar comportamentos instáveis e/ou impasse quando o Office é executado neste ambiente. Se estiver a construir uma solução que funciona num contexto do lado do servidor, deve tentar utilizar componentes que tenham sido seguros para uma execução sem supervisão. Ou, deve tentar encontrar alternativas que permitam pelo menos uma parte do código executar o lado do cliente. Se utilizar uma aplicação do Office a partir de uma solução do lado do servidor, a aplicação não terá muitas das capacidades necessárias para funcionar com sucesso. Além disso, correrá riscos com a estabilidade da sua solução global.

Problemas na utilização da automatização do serviço

Os desenvolvedores que tentam usar o Office numa solução do lado do servidor precisam estar cientes de cinco grandes áreas em que o Office se comporta de forma diferente do previsto devido ao ambiente. Se o seu código for executado com sucesso, deve abordar estes problemas e minimizar os seus efeitos o máximo possível. Considere estas questões cuidadosamente quando constrói a sua aplicação. Uma solução não pode resolver todas as questões. Diferentes desenhos requerem que você priorize os elementos de forma diferente.

  • Identidade do Utilizador: As aplicações do Office assumem uma identidade de utilizador quando as aplicações são executadas, mesmo quando a Automatização inicia as aplicações. As aplicações tentam inicializar barras de ferramentas, menus, opções, impressoras e alguns add-ins com base nas definições na colmeia de registo do utilizador para o utilizador que lança a aplicação. Muitos serviços são executados em contas que não têm perfis de utilizador (como a conta SYSTEM ou as contas IWAM_[nome de servidor]). Por isso, o Office pode não rubricar corretamente no arranque. Nesta situação, o Office retorna um erro na função CreateObject ou na função CoCreateInstance. Mesmo que a aplicação do Office possa ser iniciada, outras funções podem não funcionar corretamente se não existir nenhum perfil de utilizador.

  • Interatividade com o ambiente de trabalho: As aplicações do office assumem que estão a ser executadas sob um ambiente de trabalho interativo. Em algumas circunstâncias, as aplicações podem ter de ser tornadas visíveis para que determinadas funções de Automação funcionem corretamente. Se ocorrer um erro inesperado, ou se for necessário um parâmetro não especificado para completar uma função, o Office foi concebido para solicitar ao utilizador uma caixa de diálogo modal que pergunte ao utilizador o que o utilizador quer fazer. Uma caixa de diálogo modal num ambiente de trabalho não interativo não pode ser descartada. Portanto, este fio deixa de responder (pendura) indefinidamente. Embora determinadas práticas de codificação possam ajudar a reduzir a probabilidade desta questão, estas práticas não podem impedir totalmente a questão. Só este facto torna a execução de aplicações do Office a partir de um ambiente do lado do servidor arriscado e sem suporte.

  • Reentrância e escalabilidade: Os componentes do lado do servidor precisam de ser componentes COM altamente reentrantes, multi-roscados, com uma sobrecarga mínima e uma produção elevada para vários clientes. As candidaturas ao escritório são, em quase todos os aspetos, exatamente o oposto. As aplicações do Office são servidores de Automação não reentrantes, baseados em STA, projetados para fornecer funcionalidades diversificadas, mas intensivas de recursos para um único cliente. As aplicações oferecem pouca escalabilidade como solução do lado do servidor. Além disso, as aplicações têm limites fixos para elementos importantes, como a memória. Estes não podem ser alterados através da configuração. Mais importante ainda, as aplicações utilizam recursos globais como ficheiros mapeados de memória, add-ins ou modelos globais e servidores de Automação partilhados. Isto pode limitar o número de casos que podem ser executados em simultâneo e podem levar a condições de corrida se as aplicações estiverem configuradas num ambiente multi-cliente. Os desenvolvedores que planeiam executar mais de um caso de qualquer aplicação do Office ao mesmo tempo precisam considerar o "pooling" ou serializar o acesso à aplicação do Office para evitar potenciais impasses ou corrupção de dados.

  • Resiliência e estabilidade: O Office 2000, Office XP, Office 2003 e Office 2007 utilizam a tecnologia Microsoft Windows Installer (MSI) para facilitar a instalação e autorreparação de um utilizador final. A MSI introduz o conceito de "instalar na primeira utilização". Isto permite que as funcionalidades sejam instaladas dinamicamente ou configuradas no tempo de execução do sistema, ou mais frequentemente para um determinado utilizador. Num ambiente do lado do servidor, isto tanto abranda o desempenho como aumenta a probabilidade de aparecer uma caixa de diálogo que pede ao utilizador que aprove a instalação ou forneça um disco de instalação. Embora isto seja projetado para aumentar a resiliência do Office como um produto de utilizador final, a implementação do Office das capacidades de MSI é contraproducente num ambiente do lado do servidor. Além disso, a estabilidade do Office em geral não pode ser assegurada quando o Office é executado do lado do servidor porque não foi concebido ou testado para este tipo de utilização. A utilização do Office como componente de serviço num servidor de rede pode reduzir a estabilidade desse computador, podendo, portanto, reduzir a estabilidade de toda a sua rede.

  • Segurança do ladodo servidor : As aplicações do office nunca foram destinadas à utilização do lado do servidor. Por conseguinte, os pedidos do Office não têm em conta os problemas de segurança que os componentes distribuídos enfrentam. O Office não autentica pedidos de entrada. O Office também não o protege de executar macros inadvertidamente, ou de iniciar outro servidor que possa executar macros, a partir do seu código do lado do servidor. Não abra ficheiros que sejam enviados para o servidor a partir de um Web site anónimo. Com base nas definições de segurança que foram definidas pela última vez, o servidor pode executar macros sob um contexto de Administrador ou Sistema com plenos privilégios e pode, portanto, comprometer a sua rede. Além disso, o Office utiliza muitos componentes do lado do cliente (como o Simple MAPI, o WinInet e o MSDAIPP) que podem cache informações de autenticação do cliente para acelerar o processamento. Se o Office estiver a ser automatizado do lado do servidor, uma instância pode servir mais do que um cliente. Se a informação de autenticação tiver sido em cache para essa sessão, um cliente pode usar as credenciais em cache de outro cliente. Assim, o cliente pode obter permissões de acesso não concedidas fazendo-se passar por outros utilizadores.

Além dos problemas técnicos, deve também considerar questões de licenciamento. As atuais diretrizes de licenciamento impedem que as aplicações do Office sejam utilizadas num servidor para atender os pedidos dos clientes, a menos que esses próprios clientes tenham cópias licenciadas do Office. A utilização da automatização do lado do servidor para fornecer a funcionalidade do Office a estações de trabalho não licenciadas não está abrangida pelo Contrato de Licença de Utilizador Final (EULA). Além destes problemas, pode ocorrer um dos seguintes erros comuns quando se tenta automatizar o servidor do Office:

  • A função CreateObject e a função CoCreateInstance devolvem uma das seguintes mensagens de erro de tempo de execução e não podem ser iniciadas para automação.

    Mensagem 1

    Erro de tempo de execução '429': Componente ActiveX não pode criar objeto

    Mensagem 2

    Erro de tempo de execução '70': Permissão negada

    Mensagem 3

    CO_E_SERVER_EXEC_FAILURE (0x80080005): A execução do servidor falhou

    Mensagem 4

    E_ACCESSDENIED (0x80070005): Acesso negado

  • Quando abre um documento do Office, recebe uma das seguintes mensagens de erro.

    Mensagem 1

    Erro de tempo de execução '5981' (0x800A175D): Não foi possível abrir o armazenamento macro

    Mensagem 2

    Erro de tempo de execução '1004': Método '~' do objeto '~' falhou

  • A função CreateObject e a função CoCreateInstance deixam de responder e nunca terminam, ou demoram muito tempo a regressar. Em alguns servidores, a criação é rápida, mas 1004 erros aparecem no registo de eventos do Windows que indicam que a aplicação foi interrompida.

  • Certas funções falham inesperadamente ou deixam de responder indefinidamente devido a um alerta do utilizador ou a outra caixa de diálogo que requer a atenção do utilizador.

  • Executar vários pedidos ou testes de stress faz com que o código falhe, pare de responder ou se despenhe na criação ou cessação de uma aplicação do Office. Quando isto ocorre, ou o processo é deixado em execução na memória e não pode ser encerrado, ou todas as instâncias da aplicação que está a ser automatizada falham a partir desse ponto.

Outros problemas ou mensagens podem aparecer para além dos listados aqui, mas estes problemas ocorrem tipicamente como resultado das cinco principais questões que estão listadas anteriormente neste artigo. 

Alternativas à automatização do lado do servidor

A Microsoft recomenda vivamente que os desenvolvedores encontrem alternativas à Automatização do Office se precisarem de desenvolver soluções do lado do servidor. Devido às limitações ao design do Office, as alterações à configuração do Office não são suficientes para resolver todos os problemas. A Microsoft recomenda vivamente uma série de alternativas que não requerem que o Office seja instalado do lado do servidor, e que podem executar as tarefas mais comuns de forma mais eficiente e rápida do que a Automação. Antes de envolver o Office como componente do lado do servidor no seu projeto, considere alternativas. A maioria das tarefas de automatização do lado do servidor envolvem a criação ou edição de documentos. O Office 2007 suporta novos formatos de ficheiros Open XML que permitem aos desenvolvedores criar, editar, ler e transformar conteúdos de ficheiros no lado do servidor. Estes formatos de ficheiros utilizam o System.IO.Package.IO espaço de nome no Microsoft .NET 3.x Framework para editar ficheiros office sem utilizar as próprias aplicações do cliente do Office. Este é o método recomendado e suportado para lidar com alterações nos ficheiros do Office a partir de um serviço. Os formatos de ficheiro Open XML são um padrão público. 

A Microsoft fornece um SDK para manipular formatos de ficheiros Open XML a partir do Quadro .NET 3.x. Para obter mais informações sobre o SDK e sobre como usar o SDK para criar ou editar ficheiros Open XML, visite os seguintes web sites da Microsoft Developer Network (MSDN):

Documentação SDK Aberta XML

Como: Manipular documentos de formatos XML abertos do Office Open

Manipular ficheiros Word 2007 com o modelo de objeto aberto XML (Parte 1 de 3)

Manipulação de ficheiros Word 2007 com o modelo de objeto aberto XML (Parte 2 de 3)

Manipular ficheiros Word 2007 com o modelo de objeto aberto XML (Parte 3 de 3)

Manipulação de ficheiros Excel 2007 e PowerPoint 2007 com o modelo de objeto aberto XML (Parte 1 de 2)

Manipulação de ficheiros Excel 2007 e PowerPoint 2007 com o modelo de objeto aberto XML (Parte 2 de 2)

Construção de soluções de geração de documentos do lado do servidor usando o modelo de objeto aberto XML (parte 1 de 2)

Construção de soluções de geração de documentos do lado do servidor usando o modelo de objeto aberto XML (parte 2 de 2)

Quando transmitir ficheiros Open XML a partir de ASP ou a partir de ASP.NET, deve fornecer o tipo correto de Extensão de Correio de Internet Multiusos (MIME) para o conteúdo que transmite. Para obter uma listagem dos tipos MIME para ficheiros do Office 2007, visite o seguinte web site:

Office 2007 Formato de ficheiros TIPOS MIME para streaming de conteúdo HTTP

Se tiver como alvo apenas clientes pré-Office 2007, e não pretender a utilização do Open XML na solução, pode utilizar outros formatos de ficheiros não binários do Office, tais como HTML, XML e RTF. Em seguida, pode transmitir estes ficheiros a um cliente utilizando um tipo MIME para que o texto resultante apareça no Office. O documento pode ser editado, guardado e até devolvido ao servidor utilizando o ASP no servidor. Para obter mais informações sobre qualquer um destes tópicos, e por exemplo, que mostrem como implementá-los, clique nos seguintes números de artigos para ver os artigos na Base de Conhecimento da Microsoft:

198703 Como automatizar o Excel a partir de um VBScript do lado do cliente

278973 ExcelADO demonstra como usar a ADO para ler e escrever dados em livros do Excel

286023 Como utilizar um componente VB ActiveX para automatização de palavras do Internet Explorer  

Se o seu negócio necessitar da criação do lado do servidor dos formatos de ficheiros binários office 97, Office 2000, Office XP e Office 2003, os fornecedores de terceiros oferecem componentes que o podem ajudar. A Microsoft não fornece tais componentes, pelo que terá de construir uma solução por si mesmo ou comprar um a um fornecedor de terceiros. Muitos produtos de terceiros diferentes estão disponíveis. Deve investigar cada solução para melhor corresponder ao fornecedor às necessidades do seu negócio.

Se quiser construir a sua própria solução que edite os formatos de ficheiros Office 97, Office 2000, Office XP e Office 2003, pode obter as especificações do formato de ficheiro gratuitamente nos termos da Promessa de Especificação Aberta do Microsoft (OSP). Não existe qualquer suporte técnico para a documentação ou para os produtos que cria, mas a documentação está disponível. 

As soluções do lado do servidor também podem querer permitir que os utilizadores carreguem ficheiros e, em seguida, ter o servidor a renderizar os ficheiros para visualização na Web ou noutros meios. A Microsoft está neste momento a trabalhar para oferecer estas funcionalidades, e fornece uma versão inicial desta capacidade nos Serviços Do Microsoft Excel. O Excel Services é uma nova tecnologia de servidor que está incluída no Microsoft Office SharePoint Server 2007 e que lhe permite carregar, calcular e exibir livros do Excel no Office SharePoint Server 2007. Para obter mais informações sobre os Serviços Excel, visite os seguintes web sites da Microsoft Developer Network (MSDN):

Visão geral dos serviços do Excel

Walkthrough: Desenvolver uma aplicação personalizada usando os serviços web do Excel

Criação de aplicações empresariais utilizando serviços Excel e formatos Open XML do Office Word Automation Services é uma nova aplicação de serviço no SharePoint Server 2010. Os Word Automation Services fornecem uma conversão não acompanhada do servidor de documentos em formatos suportados pela aplicação do cliente Microsoft Word.

Visão geral dos serviços de automação de palavras

Introdução de Serviços de Automação de Palavras Você precisa avaliar quais das opções que este artigo descreve se adequam às suas necessidades, e a melhor forma de implementar a sua solução. A informação que este artigo fornece não é garantida para resolver todos os problemas para todos os clientes. É encorajado a testar a sua solução cuidadosamente antes de implementar a solução.

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×