O que o regsvr32 faz?

7

Para registrar um arquivo DLL em um servidor Windows usando regsvr32 , você primeiro precisa mover o arquivo para sua pasta system32 ou isso é feito automaticamente quando você chama o comando regsvr32 ?

Se eu soltar um arquivo dll na minha área de trabalho e registrá-lo lá, posso simplesmente excluí-lo após o registro? O que aconteceria depois de removê-lo?

Em outras palavras, como o regsvr realmente funciona?

    
por bvdb 28.02.2017 / 15:56

2 respostas

5

Além da resposta correta do @Matthew Wetmore, a coisa normal que acontece é que ele registra todos os componentes COM nessa dll.

Especificamente, ele cria duas chaves (+ subchaves) no registro do Windows.

Por exemplo considere uma dll: dao360.dll , que possui vários objetos COM dentro dela. Para cada uma, a primeira chave é algo como:

HKLM\SOFTWARE\Classes\DAO.TableDef.36

para o objeto DAO Table Defintion, o nome da chave é o ProgID do objeto COM ao qual os programadores se refeririam em seu código.

Sob a chave é geralmente uma única chave com um valor padrão:

HKLM\SOFTWARE\Classes\DAO.TableDef.36\CLSID

neste caso:

{00000103-0000-0010-8000-00AA006D2EA4}

este é o ID de Classe ou CLSID para o objeto COM, nos informa onde a segunda chave está localizada:

HKLM\SOFTWARE\Classes\CLSID{00000103-0000-0010-8000-00AA006D2EA4}

Essa chave com suas subchaves e valores possui informações adicionais sobre o objeto COM.

Um valor a ser observado é o valor padrão em:

HKLM\SOFTWARE\Classes\Wow6432Node\CLSID{00000103-0000-0010-8000-00AA006D2EA4}\InprocServer32

tem o caminho do arquivo exe / dll que hospeda o objeto COM, no nosso exemplo:

%CommonProgramFiles%\Microsoft Shared\DAO\dao360.dll

Este é o caminho de arquivo correto quando regsvr32.exe foi usado para registrar esse objeto COM. Se você mover o arquivo manualmente, o objeto COM não funcionará mais porque esse valor do registro agora referencia um arquivo ausente.

Portanto, antes de usar o regsvr32.exe em uma DLL, mova-o para o local final e não mova a DLL após registrá-la.

    
por 01.03.2017 / 07:15
10

RegSvr32 chama um método exportado DllRegisterServer na DLL. O que especificamente acontece a seguir depende da implementação. Muitas vezes chaves de registro para COM são escritas com base no local do arquivo. O registro não deve, geralmente, ser considerado um instalador que faz muito além disso.

A menos que haja algo específico para o aplicativo, ele pode ser registrado de qualquer lugar, mas você não deve movê-lo / removê-lo depois disso. O SysMon da SysInternal pode assistir ao registro e ao acesso ao registro quando você chama o registro, se você realmente deseja ver os detalhes - embora nada impeça o código de fazer nada ou realmente qualquer coisa de código pode fazer como acessar a internet, escrever ou remover outros arquivos, etc. Como qualquer executável, apenas registre o código que você confia.

Há também DllInstall que pode ser chamado com regsvr32 /i , que deve ser um instalador de acordo com a documentação regsvr32 :

Regsvr32
This command-line tool registers .dll files as command components in the registry.
Syntax
regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
Parameters
/u : Unregisters server.
/s : Specifies regsvr32 to run silently and to not display any message boxes.
/n : Specifies not to call DllRegisterServer. You must use this option with /i.
/i :cmdline : Calls DllInstall passing it an optional [cmdline]. When used with /u, it calls dll uninstall.
dllname : Specifies the name of the dll file that will be registered.
/? : Displays help at the command prompt.

Há também DllUnregisterServer , mas a partir da experiência prática, as implementações são geralmente de qualidade inferior à do registro.

Um dos objetivos do Windows Installer (MSI) era dissociar a instalação de código como este.

    
por 28.02.2017 / 16:36