Como cancelar minha .net montagem quando ele não é mais no mesmo local?
-
19-08-2019 - |
Pergunta
Eu tenho um dll que está registrado para interoperabilidade, assim sob HKLM \ Software \ Classes \ CLSID [minha guid] \ InprocServer32 [minha versão no] \ Codebase tem o caminho da dll registrado. No entanto, eu reorganizadas minha estrutura de pastas para que esse caminho não é mais correto. Existe uma maneira de cancelar o registro de que dll sem colocá-lo de volta, em seguida, cancelar o registro, em seguida, remover o arquivo novamente?
E se eu não tenho esse dll mais, ou só têm um com um número de versão diferente?
Solução
números de versão diferente (em geral) não importa. Enquanto o mais recente DLL contém todas as GUIDs que aparecem na versão mais antiga, ele será não registrado corretamente (usando o novo com regasm, exe). E, claro, registrando novamente o assembly para interoperabilidade será adequadamente a mudar de chaves de registro necessárias.
Outras dicas
Tanto quanto eu sei - tudo que você precisa é registrar o DLL em sua nova localização
.
Você pode usar a ferramenta MS Oleview.exe para verificar os pontos de registro cOM para o local correto.
O problema que encontramos com apenas registrar o novo dll é quando ele tem uma versão inferior ao que anteriormente registado. Você acaba com esta no registo:
HKCR\MyLib.MyClass\CLSID:(Default)=<my guid>
and
HKCR\CLSID\<my guid>:Assembly=<string containing version number>
and
HKCR\CLSID\<my guid>\InprocServer32\<version number>\ ... more details
Eu acho que o tempo de execução vai tentar carregar o assembly identificado em HKCR\CLSID\<my guid>:Assembly
, assim que você quer tentar cancelar o registro de que um, se possível.
Esta não é uma resposta sobre como cancelar o registro, mas se você não pode cancelar o registro que eu achei que seria útil para chegar lá e retire a chave para o número da versão você já não tem, e provavelmente atualizar o valor Assembly
manualmente se você ousar.