.netアセンブリが同じ場所になくなったときに登録を解除する方法は?
-
19-08-2019 - |
質問
com interopに登録されているdllがあるので、HKLM \ Software \ Classes \ CLSID [my guid] \ InprocServer32 [my version no] \ Codebaseには登録されたdllのパスがあります。ただし、パスが正しくなくなるようにフォルダー構造を再配置しました。 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
あえて値を手動で。