Erro de objeto do servidor ASP 0177:80040154

Este artigo ajuda a resolve o erro que ocorre quando você tenta executar um Active Server Pages que usa Server.CreateObject para instanciar um componente ActiveX.

Versão original do produto: Páginas do Microsoft Active Server
Número de KB original: 175804

Sintomas

Ao tentar executar uma página ASP (Active Server Pages) que usa Server.CreateObject para instanciar um componente ActiveX, a seguinte mensagem de erro é exibida:

Server object error 'ASP 0177:80040154'
Server.CreateObject Failed
/<path>/<yourasp.asp><line #>
The call to Server.CreateObject failed. The request object instance Cannot be created.

Motivo

Aqui estão algumas das causas típicas deste erro:

  • Seu controle não está registrado corretamente.

  • O Usuário conectado, geralmente, a conta anônima não tem permissões adequadas para executar o controle. Em muitos casos, a conta de logon anônimo (IUSR_<machine>) não tem permissões apropriadas em determinado Directories/Files ou no componente específico e em suas dependências. Embora seja menos frequente, se as permissões do Registro para determinadas chaves não forem definidas corretamente, isso fará com que o controle não seja inicializado.

  • O grupo Todos foi removido de ter permissões de LEITURA em determinadas chaves de registro devido à noção equivocada de que Todos significam QUALQUER PESSOA, quando, na verdade, isso significa simplesmente todos os usuários validados no Domain/machine.

  • No caso de um banco de dados de arquivo, como Access ou FoxPro, o diretório que contém os arquivos de banco de dados não fornece permissões suficientes para o usuário autenticado.

Resolução

Aviso

O seguinte pressupõe uma familiaridade com o Servidor de Informações da Internet e a edição do registro. É sempre recomendável fazer backup do Registro antes de fazer qualquer alteração.

Como esse erro está associado a configurações de permissão incorretas em arquivos ou configurações de registro, você deve concluir as seguintes etapas:

  1. Descubra quem é o Usuário Autenticado. Para determinar qual usuário está sendo autenticado, adicione o seguinte código à parte superior da página ASP:

     <%
     Response.Write("LOGON_USER: " & _
     Request.ServerVariables("LOGON_USER"))
     %>
    

    Se o LOGON_USER estiver em branco, você estará sendo autenticado como IUSR_machine. Caso contrário, o LOGON_USER exibe o <domain\user> nome do usuário autenticado que está tentando criar o objeto.

  2. Confirme se o Usuário Autenticado (ou Grupo) tem permissão nos diretórios, arquivos e chaves de registro necessários. Isso requer conhecimento dos diretórios, arquivos e chaves do registro específicos para o controle. Abaixo está uma lista dos requisitos para Objetos de Dados ActiveX.

Permissões de diretório/arquivo para caso específico do ADO

\InetPub - IUSR_<machine> READ
\InetPub\wwwroot - IUSR_<machine> READ
\Program Files\Common Files\System\ADO - IUSR_<machine> READ
\Program Files\Common Files\System\OLE DB - IUSR_<machine> READ
\Program Files\Common Files\ODBC\Data Sources -IUSR_<machine> READ
\WinNT - IUSR_<machine> CHANGE
\WinNT\System32 - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp - IUSR_<machine> READ
\WinNT\System32\Inetsrv\Asp\Cmpnts - IUSR_<machine> READ
\WinNT\Temp - IUSR_<machine> CHANGE

Permissões de registro para caso específico do ADO

Verifique se as seguintes permissões estão definidas nas chaves listadas abaixo:

Permissões:

<machine>\Administrator      - Full Control  
Creator Owner                - Full Control  
Everyone                     - READ  
INTERACTIVE                  - Special Access (Query Value, Set Value, Create Subkey,
                                               Enumerate Subkeys, Notify, Delete)  
SYSTEM                       - Full Control

Chaves:

HKEY_CLASSES_ROOT
\LICENCES
\CEDD4F80-B43C-11cf-837C-00AA00573EDE
HKEY_CLASSES_ROOT
\ADODB.Command
\ADODB.Connection
\ADODB.Parameter
\ADODB.Recordset

Permissões de arquivo e pasta para o caso do banco de dados

Verifique se os arquivos de banco de dados e as pastas que contêm os arquivos de banco de dados fornecem permissões De leitura, gravação e execução para o usuário ou grupo autenticado.

Etapas gerais de tiro com problemas

  1. Verifique se o ASP está instalado corretamente executando o ADO usando Server.CreateObject o exemplo na pasta Roadmap\More Samples do Active Server Pages.
  2. Verifique se todas as DLLs estão registradas com Regsvr32.
  3. Verifique se não há várias versões da DLL registradas e a entrada do registro aponta para a correta.
  4. Verifique se as DLLs estão usando o Modelo de Threading de Apartamento e não são Threaded Único (Confira a Nota 2 abaixo).
  5. Confirme se o PDC (Controlador de Domínio Primário) deu a todos que acessem este computador a partir dos direitos de rede . Se o IIS for um PDC, certifique-se de que o IUSR_<machine> também tem esses direitos, bem como log em direitos locais .

Permissões rápidas marcar etapas

  1. Force Anonymous desmarcando o NTCR (Basic and NT Challenge and Response) no IIS Service Manager.
  2. Adicione temporariamente o IUSR_<machine> ao grupo Administradores para ver se ele faz a diferença. Se isso acontecer, o problema será um problema de permissões.
  3. Ative a Auditoria NT (conforme observado abaixo) e tente novamente.

Não tão rápidas permissões marcar etapas

  1. Force Anonymous desmarcando o NTCR (Basic and NT Challenge and Response) no IIS Service Manager.
  2. Crie uma nova conta de usuário do NT chamada IUSR_Test.
  3. IUSR_Test controle total da unidade raiz e desatribua essas permissões até o fim. Posteriormente, IUSR_Test pode ser excluído, removendo-os de quaisquer diretórios ou arquivos.
  4. Ative a Auditoria NT (conforme observado abaixo) e tente novamente.

Habilitar a Auditoria NT:

Para habilitar a auditoria, abra o Gerenciador de Usuários e selecione Auditoria no menu Políticas . Selecione a falha de Acesso ao Arquivo e ao Objeto . Abra Windows NT Explorer e selecione a raiz do disco rígido. Clique com o botão direito do mouse e selecione propriedades. Selecione a guia Segurança e pressione o botão Auditoria . Adicione o usuário de interesse (aquele retornado pela página ASP ou IUSR_machine) e selecione todas as caixas de marcar de falha. Verifique se você aplica essas configurações a todas as pastas. Use o Visualizador de Eventos para ver quaisquer falhas de acesso (selecione Segurança no menu Log). Desative a auditoria quando terminar de fazer alterações.

OBSERVAÇÃO 1: o Jet usa as SYSTEM TEMP variáveis de ambiente e TMP para especificar o local dos arquivos temporários criados durante as operações jet. Por padrão, essas variáveis de ambiente são definidas para usuários e não são configurações em todo o sistema. Para configurá-los, você pode fazer uma das duas operações a seguir.

  • Opção 1. No autoexec.bat, adicione algo semelhante às duas linhas a seguir:

    Set TEMP=C:\Temp
    Set TMP =C:\Temp
    
  • Opção 2. Clique com o botão direito do mouse em Meu Computador:

    1. Clique em Propriedades e selecione a TAB do Ambiente.

    2. Clique em uma entrada na caixa Lista de Variáveis do Sistema (aquela na parte superior).

    3. No controle Variável e Edição de Valor , digite o seguinte:

      Variable = Temp
      Value = C:\Temp
      
    4. Clique em Definir. Agora você verá TEMP que foi adicionado à lista de variáveis do sistema.

    5. Repita o processo para a TMP variável.

    6. Reinicialize o computador para que as alterações entrem em vigor. Além disso, foi encontrado que IUSR_<machine> precisa de permissão CHANGE para o diretório WinNT para criar arquivos temporários ao usar o driver de banco de dados access.

OBSERVAÇÃO 2: Por padrão, o ASP cria clientes de apartamento com thread único, o que significa que apenas servidores inproc de apartamento com thread único recebem o contexto de segurança desejado transmitido pelo IIS. Todos os outros modelos de threading são executados no contexto SYSTEM. Isso significa que uma DLL usando o Modelo de Threading Único será inicializada no Contexto de Segurança do SYSTEM e não conforme o Usuário Autenticado.