Como sei se uma DLL está registrada?

20

Quando você está registrando uma DLL em máquinas antigas (Windows XP), o regsrv sempre diz que o registro foi bem-sucedido. Isso acontece mesmo que o usuário não tenha permissão para se registrar.

Com o nome da dll, existe um comando que eu possa executar na linha de comando para verificar se uma DLL está instalada?

    
por neves 19.02.2014 / 19:50

2 respostas

15

Eu encontrei este link: Como posso saber se uma DLL tem foi registrado? :

Given that DLL registration can encompass arbitrary operations, there is no general-purpose way of determining whether registration has taken place for an arbitrary DLL.

To determine whether a DLL has been registered, you need to bring in domain-specific knowledge. If you know that a DLL registers a COM object with a particular CLSID, you can check whether that CLSID is indeed registered.

OK, é impossível, mas as DLLs geralmente se registram criando uma entrada no registro. Uma solução alternativa é:

  1. Primeiro você precisa descobrir o GUID COM da DLL. Se você tem uma máquina onde já está registrada, você pode:
    1. Abra o regedit e procure por seu nome de arquivo DLL
    2. Se estiver registrado, você encontrará o nome do arquivo em uma chave que esteja sob o TypeLib. A chave será semelhante a: {9F3DBFEE-FD77-4774-868B-65F75E7DB7C2}
  2. Agora que você conhece o DLL GUID, é possível procurá-lo com esse comando em um prompt do DOS: reg query HKCR\CLSID | find /i "{9F3DBFEE-FD77-4774-868B-65F75E7DB7C3}"

Uma resposta melhor me permitiria encontrar o GUID diretamente do arquivo antes de ser registrado. Pelo menos dessa maneira você pode criar um script para instalar e verificar se ele foi instalado com sucesso.

    
por 19.02.2014 / 19:58
10

Eu precisava verificar se uma DLL com nome específico está registrada e usei este comando no meu BAT:

reg query HKLM\SOFTWARE\Classes /s /f whatever.dll
if errorlevel 1 goto DLL_MISSING

Se com o controle errorlevel enviado para o rótulo whenver reg query não encontrou nada. Talvez seja necessário alterar a parte do registro em que você pesquisa (no meu caso, HKLM'... , o caminho mais específico, o mais rápido, caso contrário, demora muito).

A saída pode ser processada se necessário, o GUID da entrada pode ser obtido, mas isso está fora do escopo do comando reg query.

    
por 30.07.2015 / 15:55