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 determinadoDirectories/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:
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 comoIUSR_machine
. Caso contrário, oLOGON_USER
exibe o<domain\user>
nome do usuário autenticado que está tentando criar o objeto.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
- Verifique se o ASP está instalado corretamente executando o ADO usando
Server.CreateObject
o exemplo na pasta Roadmap\More Samples do Active Server Pages. - Verifique se todas as DLLs estão registradas com
Regsvr32
. - Verifique se não há várias versões da DLL registradas e a entrada do registro aponta para a correta.
- 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).
- 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
- Force Anonymous desmarcando o NTCR (Basic and NT Challenge and Response) no IIS Service Manager.
- 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. - Ative a Auditoria NT (conforme observado abaixo) e tente novamente.
Não tão rápidas permissões marcar etapas
- Force Anonymous desmarcando o NTCR (Basic and NT Challenge and Response) no IIS Service Manager.
- Crie uma nova conta de usuário do NT chamada IUSR_Test.
- Dê 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.
- 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:
Clique em Propriedades e selecione a TAB do Ambiente.
Clique em uma entrada na caixa Lista de Variáveis do Sistema (aquela na parte superior).
No controle Variável e Edição de Valor , digite o seguinte:
Variable = Temp Value = C:\Temp
Clique em Definir. Agora você verá
TEMP
que foi adicionado à lista de variáveis do sistema.Repita o processo para a
TMP
variável.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.