ID do artigo: 194801 - Última revisão: terça-feira, 9 de agosto de 2005 - Revisão: 6.3

ASP (Active Server Pages) retorna erro de tempo de execução de VBScript "800a01ad"

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

O uso de CreateObject para criar um componente COM em uma página ASP (Active Server Pages) pode resultar no seguinte erro:
Erro de tempo de execução do Microsoft VBScript "800a01ad"
O componente ActiveX não consegue criar o objeto
Esse erro é normalmente gerado porque ocorre o seguinte com as bibliotecas de vínculo dinâmico (DLLs) das quais o objeto COM depende:
  • Estão faltando no sistema
  • Não estão no caminho do sistema
  • Não podem ser acessadas pelo sistema devido a configurações de segurança

Mais Informações

Cada uma das razões acima se aplica à DLL que implementa o objeto COM, assim como qualquer uma das dependências das DLLs. Por exemplo, se uma DLL COM estiver vinculada estaticamente com uma DLL Win32 e a DLL Win32 estiver faltando no sistema, um erro 800a01ad será gerado.

Existem muitas maneiras de determinar as dependências de DLL. Entre elas estão a ferramenta Depends.exe, que vem com a Plataforma SDK (Software Development Kit) e com o Developer Studio 98 e o utilitário DUMPBIN, que é instalado com o Visual C++.

Os seguintes arquivos estão disponíveis para download no Centro de Download da Microsoft:

Recolher esta imagemExpandir esta imagem
Download
Baixe o pacote Dependsia64version2.1.3623.exe agora. (http://download.microsoft.com/download/visualfoxpro7/utility/2.1/w9x2kmexp/en-us/dependsia64version2.1.3623.exe)
Recolher esta imagemExpandir esta imagem
Download
Baixe o pacote Dependsx86version2.1.3623.exe agora. (http://download.microsoft.com/download/visualfoxpro7/utility/2.1.3623/w9x2kmexp/en-us/dependsx86version2.1.3623.exe)

Data de lançamento: 25 de junho de 2002

Para obter informações adicionais sobre como baixar arquivos de Suporte da Microsoft, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
119591  (http://support.microsoft.com/kb/119591/ ) Como obter arquivos de suporte da Microsoft nos serviços online
A Microsoft examinou esse arquivo em busca de vírus. A Microsoft utilizou o mais recente software de detecção de vírus disponível na data em que o arquivo foi publicado. O arquivo está armazenado em servidores de segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo. Para obter informações adicionais sobre essa ferramenta, visite o seguinte site da Dependency Walker (em inglês):
http://www.dependencywalker.com (http://www.dependencywalker.com)
A Microsoft fornece informações para contato com outras empresas para ajudá-lo a encontrar o suporte técnico. Essas informações para contato podem ser alteradas sem notificação prévia. A Microsoft não garante a precisão dessas informações para contato com outras empresas.

Para usar o Depends, simplesmente execute a ferramenta e abra a DLL em questão. Para usar DUMPBIN para ver as dependências, execute o seguinte em um prompt de comando "dumpbin /IMPORTS <nome da DLL>". O utilitário Depends possui a vantagem de exibir as dependências das dependências. Poderia parecer que uma exibição rápida no Windows Explorer exibisse as mesmas informações, mas foi observado que as informações exibidas nem sempre são completas.

A seguir estão informações adicionais sobre cada uma das possíveis causas:

DLLs faltando no sistema

A DLL que implementa o objeto COM deve existir no sistema e estar registrada com o caminho correto. Falha na criação de um objeto COM que não está registrado irá gerar um erro diferente:
Erro do objeto do servidor "ASP 0177: 800401f3"

Para verificar se o caminho no Registro está correto, execute o programa RegEdit e procure por PROGID (localizado na chamada CreateObject). A partir da entrada PROGID, grave ou copie o CLSID na Área de transferência e localize a entrada para CLSID. Essa entrada deve conter uma chave InprocServer32 com um caminho para a DLL. A seguir, uma demonstração do fluxo deste processo:
   (a partir do arquivo asp)
   set obj = Server.CreateObject("BadComponent.Badguy")

   (a partir do RegEdit)
   HKEY_CLASSES_ROOT\BadComponent.BadGuy\CLSID
      {683DA7E0-5C73-11D2-80F6-0000F87A8236}

   HKEY_CLASSES_ROOT\CLSID\{683DA7E0-5C73-11D2-80F6-0000F87A8236}\ 
      InprocServer32 E:\Programs\COMPON~1\BADCOM~1\Debug\BADCOM~1.DLL
				

Os seguintes comandos executados a partir de um prompt de comando verificarão a existência deste arquivo:
   E:\>cd E:\Programs\COMPON~1\BADCOM~1\Debug
   E:\Programs\COMPON~1\BADCOM~1\Debug>dir BADCOM~1.DLL

   10/14/98  11:18a               241,739 BadComponent.dll

                  1 File(s)        241,739 bytes
                             2,038,755,328 bytes free
				

Se nenhum arquivo estiver especificado no Registro para a DLL, a DLL deverá existir no caminho do sistema.

Uma DLL COM pode ter outras dependências além das DLLs Win32 vinculadas estaticamente (DUMPBIN e Depends.exe mostram DLLs vinculadas estaticamente). Por exemplo, um objeto COM pode chamar LoadLibrary() e chamar funções em uma DLL Win32. Da mesma forma, o controle pode criar objetos COM contidos em DLLs separadas. Qualquer uma dessas DLLs pode estar faltando, registrada inadequadamente ou inacessível devido a segurança. Isso resultaria em um erro de tempo de execução que pode ou não ser encontrado durante a criação do controle. O retorno de S_FALSE do método FinalConstruct() de um controle ATL pode simular um exemplo de falha de controle durante a criação. Isso presume que LoadLibrary() ou CoCreateInstance() falharam em FinalConstruct() e o programador escolheu verificar isso e retornar S_FALSE. O erro gerado nesse caso será similar ao seguinte:
erro "ASP 0115"
Erro inesperado
/badguy.asp
Um erro interceptável ocorreu em um objeto externo. O script não pode
continuar sendo executado.
Erro do objeto do servidor "ASP 0115: 8000ffff"

Falha desse tipo não irá gerar um erro 800a01ad.

DLLs que não estão no caminho do sistema

O sistema deve ser capaz de encontrar as DLLs dependentes (vinculadas estaticamente) da DLL que implementa o objeto COM sendo criado. Usando DUMPBIN ou Depends, determine quais são os dependentes das DLLs. Verifique se todas essas DLLs estão no mesmo diretório que a DLL COM ou no caminho do sistema.

DLLs não acessíveis pelo sistema devido a configuração de segurança

Quando um cliente solicita uma página ASP (Active Server Pages) a partir de um servidor, a página ASP executa em um contexto de segurança dependente do método de autenticação usado para acessar o servidor da Web. Por exemplo, solicitações anônimas executam no contexto de IUSR_MACHINENAME no qual MACHINENAME é o nome do seu computador. Para obter informações sobre outros métodos de autenticação e considerações de segurança, consulte a documentação do IIS. O que isso significa com relação a um erro 800a01ad é que o usuário autenticado deve ter acesso (por meio de permissões de arquivo NTFS) à DLL COM e todas as DLLs dependentes.

Uma análise mais detalhada pode ser usada para determinar se isso é a causa do problema. Usando o Windows Explorer, selecione Propriedades para DLL COM, selecione a guia Segurança e conceda a "todos" pelo menos acesso de leitura à DLL. Faça o mesmo para as DLLs dependentes e diretórios contendo as DLLs. Isso deve eliminar qualquer restrição de segurança que possa estar afetando a criação do objeto COM. A segurança pode ser reforçada após determinar que esse era o problema. Lembre-se, muitas das DLLs dependentes são DLLs de sistema do Windows e já terão pelo menos o acesso "leitura para todos". Não remova esse acesso por engano ao "reforçar" a segurança.

(c) Microsoft Corporation 1998, Todos os direitos reservados. Contribuições por Robert E. Duke, Microsoft Corporation.


A informação contida neste artigo aplica-se a:
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
Palavras-chave: 
kberrmsg kbprb kbsecurity KB194801