ID do artigo: 254957 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 3.1

Erro: Código de atualização do Registro pode falhar quando um usuário sem privilégios executa um servidor OLE do MFC no Windows 2000

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.
importante : Este artigo contém informações sobre como modificar o registro. Antes de modificar o registro, certifique-se de backup e certifique-se que você saiba como restaurar o registro se ocorrer um problema. Para obter informações sobre como fazer backup, restaurar e editar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
256986  (http://support.microsoft.com/kb/256986/EN-US/ ) Descrição do registro do Microsoft Windows

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando um usuário sem privilégios (por exemplo, um não administrador ou um não-energia) executa um servidor OLE do Microsoft Foundation Classes (MFC) padrão no Windows 2000, a atualização de registro falha e exibe a seguinte mensagem de erro:
"Falha ao atualizar o registro do sistema. Tente usar REGEDIT."

Causa

Este erro ocorre porque cada execução de um OLE do MFC executável servidor, ele chama a função UpdateRegistry na classe COleTemplateServer . A função MFC UpdateRegistry atualiza as entradas do registro em HKEY_CLASSES_ROOT para o aplicativo e seus tipos de documento. Esta atualização ou cria as entradas quando o programa é executado pela primeira vez ou atualiza as entradas para reparar qualquer dano que pode ter ocorrido. No Windows 2000, o acesso para HKEY_CLASSES_ROOT é restrito aos administradores e usuários avançados.

Resolução

Aviso : se você usar o Editor do Registro incorretamente, poderá causar problemas sérios que talvez exijam a reinstalação do sistema operacional. A Microsoft não garante que você pode resolver problemas resultantes do uso incorreto do Editor do Registro. Use o Editor do registro por sua própria conta e risco.


Para resolver o erro e permitir que o servidor registrar quando ele é executado por um usuário privilegiado, testar as permissões do registro quando você abre uma chave, como demonstrado no código a seguir:
HKEY hTestKey = NULL;
LONG lResult = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, 
                          "MFCOServ.Document", 0, "", 
                          REG_OPTION_NON_VOLATILE, 
                          KEY_ALL_ACCESS, NULL, 
                          &hTestKey, NULL);
if ((ERROR_SUCCESS == lResult) && (hTestKey != NULL))
{
   // It's ok to call UpdateRegistry
}
				
Observe que o segundo parâmetro para RegCreateKeyEx é o tipo de documento no registro. Isso será específico para seu projeto.

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.

Mais Informações

O Windows 2000 por padrão é um ambiente Windows seguro. Nesse ambiente, os usuários sem privilégios podem gravar em três locais de específicos:
  1. À sua própria parte do Registro, designado como HKEY_CURRENT_USER , com duas exceções a seguir:
    Software\Policies
    					
    e
    \Software\Microsoft\Windows\CurrentVersion\Policies
    					
  2. Para seu próprio diretório de perfil de usuário ( CSIDL_PROFILE ).
  3. Um local de documentos compartilhados ( CSIDL_COMMON_DOCUMENTS ).
Aplicativos devem ser instalados por administradores e usuários avançados. Um MFC OLE servidor, que anteriormente foi registrado por um usuário privilegiado, continua a executar com êxito após o erro é resolvido.

Passos para reproduzir o problema

  1. Use AppWizard MFC para gerar um aplicativo executável MFC.
  2. Na página 1 de AppWizard MFC, selecione o tipo de documento único ou multi-document aplicativo.
  3. Na página 3 do AppWizard MFC, selecione "servidor completo" ou "tanto recipiente e servidor" como o tipo de suporte de documento composto que você deseja incluir.
  4. Aceite os padrões nas páginas restantes AppWizard MFC.
  5. Crie o aplicativo.
  6. Em logon de um usuário sem privilégios, executar o aplicativo e o erro é exibido. Se o aplicativo já foi registrado no computador, em seguida, o erro foi resolvido e o programa continua a executar. Se o aplicativo nunca foi registrado no computador de destino, ele falhará.

Referências

Especificações de aplicativo do Microsoft Windows 2000 para aplicativos de desktop (Specifications\Platforms).
Especificações de aplicativo do Microsoft Windows 2000 para aplicativos distribuídos (Specifications\Platforms).
Microsoft Windows 2000 Application Compatibility (técnica Articles\Windows Platform\Windows 2000).
Windows 2000 Group Policy (Backgrounders\Windows Platform\Windows 2000)

A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 Service Pack 5
Palavras-chave: 
kbmt kbtshoot kbbug kbdocview kboleapp kbpending KB254957 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 254957  (http://support.microsoft.com/kb/254957/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.