none
Falha ao acessar registro por DLL. RRS feed

  • Pergunta

  • E aí galera, preciso de ajuda com uma DLL que fiz para ler o registros.

    Fiz a DLL no Visual Studio 2008, ela funciona no Win 2003 Enterprise, Win 2008 Enterprise, Win 2008 R2, Win XP, Win Vista (não testei no win 7), todos x86, funciona tbm nos Windows: 2008 Enterprise, 2008 R2 e Vista, na arquitetura x64, porém quando tento usa-la no windows 2003 enterprise x64 não consigo acessar o registro, recebo sempre a seguinte exception: "Acesso ao Registro solicitado não é permitido."

    Já procurei na net e não consegui achar algo que me ajudasse a resolver o problema. Estou usando um usuário que é administrador, já olhei nas permissões do registro e elas estão ok (de acordo com os sistemas que funcionam). Tentei tbm registrar a DLL (procedimento que não realizo nos SOs que funcionam) e recebo o seguinte erro:

    "Registro.dll foi carregado, mas o ponto de entrada DllRegisterServer não foi localizado

    Este arquivo não pode ser registrado."

     

    Já olhei no site da MSDN e todas as dependências usadas pelo RegSvr32 estão ok.

     

    Alguém possui alguma informação que possa me orientar a encontrar o erro?

     

    Grato!

     

     

    PS1.: A DLL usada nos sistemas x86 e x64 possuem códigos idênticos mudando-se apenas a arquitetura de compilação.

    PS2.: Consumindo a DLL por meio de um aplicativo .exe, ela funciona normalmente.

    PS3.: A DLL é usada por um aplicativo que executa no IIS, logo creio que o erro esteja relacionado a isso.

    • Editado William MP quarta-feira, 8 de dezembro de 2010 13:28 atualização
    quarta-feira, 8 de dezembro de 2010 12:50

Todas as Respostas

  • PS2.: A DLL é usada por um aplicativo que executa no IIS, não sei se pode existir alguma relação com isto, mas já coloquei o usuário IUSR_MAQUINA com acesso de leitura no registro e o erro prevalece.

    PS3.: Usando a mesma classe que uso para leitura do registro em um programa executável nao possuo problema para ler do registro.

    Visto estas 2 observações. É bem provável que o programa Console está rodando como Administrator que tem acesso total ao Registry. No contexto do IIS, provavelmente o IUSR_MachineName ou outro usuário, que o host está usando para impersonation, não tem este acesso.

    Veja se isto ajuda Setting IIS Process Identity for IIS 6.0 on Windows Server 2003): http://msdn.microsoft.com/en-us/library/aa954062(BTS.20).aspx

     

    Sobre: "Registro.dll foi carregado, mas o ponto de entrada DllRegisterServer ..." parece que sua DLL não é um componente com COM.

     

     


    Fabio Galuppo
    quarta-feira, 8 de dezembro de 2010 13:39
  • Pé de pano,

     

    Se for IIS mais novo (acho que 6.5 em diante), verifique se o usuário associado ao application pool em que executa sua aplicação Web tem direito de acessar o registry.

     

    Abraço,

    Eric

    quarta-feira, 8 de dezembro de 2010 15:25
  • Eric, verifiquei isso, o usuário utilizado no application pool é o IWAM_MAQUINA, coloquei ele com controle total no registro e mesmo assim continuo recebendo o mesmo erro.

    A aplicação faz uso do sistema basico de autenticação, vc sabe se tem algum usuário a mais que eu deva conceder permissões?

     

    PS.: Os usuários que concedi foram: IUSR_MAQUINA, IWAM_MAQUINA e IIS_WPG (todos com controle total).

    quinta-feira, 9 de dezembro de 2010 12:00