Как отменить регистрацию моей сборки .net, когда она больше не находится в том же месте?
-
19-08-2019 - |
Вопрос
У меня есть dll, которая зарегистрирована для com-взаимодействия, поэтому в HKLM \ Software \ Classes \ CLSID [my guid] \ InprocServer32 [my version no] \ Codebase есть путь к зарегистрированной dll. Тем не менее, я изменил структуру папок, чтобы путь больше не был правильным. Есть ли способ отменить регистрацию этой dll, не возвращая ее, затем отменить регистрацию, а затем снова удалить файл?
А что, если у меня больше нет этой dll или есть только одна с другим номером версии?
Решение
Различные номера версий (как правило) не имеют значения. До тех пор, пока более новая DLL содержит все идентификаторы GUID, которые появляются в более старой версии, она не будет должным образом зарегистрирована (используя новую с regasm, exe). И, конечно же, перерегистрация сборки для взаимодействия COM будет правильно перемещать необходимые ключи реестра.
Другие советы
Насколько я знаю, все, что вам нужно, это зарегистрировать DLL в новом месте.
Вы можете использовать инструмент MS oleview.exe , чтобы убедиться, что регистрация COM указывает на правильное местоположение.
Проблема, с которой мы столкнулись при регистрации нового dll, заключается в том, что он получил более низкую версию по сравнению с ранее зарегистрированной. Вы в конечном итоге с этим в реестре:
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
Я думаю, что среда выполнения попытается загрузить сборку, указанную в HKCR\CLSID\<my guid>:Assembly
, поэтому вы можете отменить ее, если это возможно.
Это не ответ о том, как отменить его регистрацию, но если вы не можете отменить регистрацию, я нашел полезным войти туда и удалить ключ для номера версии, которого у вас больше нет, и, возможно, обновить Assembly
цените вручную, если решитесь. Р>