質問者
ATLでDLL削除後の登録解除方法は?

質問
-
皆さんこんにちは。
私は今ATLの勉強をしています。私の場合、ATLの勉強時に適当にProgID名をつけて数多く作成します。
すると、ビルドするコントロール毎ににActiveXコントロールに数多く登録されます。こうなると、似たような名前で煩雑に登録されているはずなので、不要となった
登録を削除したくなるが流れだと思います。もし、プロジェクトフォルダが残っていたら、
1.ツールー>ActiveXテストコンテナを起動
2.ファイルー>コントロールの登録ー>登録解除
で登録解除できる(結構めんどくさい)のですがプロジェクトフォルダを完全消去してしまっていたら上記方法では、
登録解除できません。『~レジストリーを削除しますか?』と出て「はい」
をクリックしても永遠に残り続けます。regedt32で手動で消すにしても消す場所が分かりません。
誰か、もっとActiveX登録解除方法の簡単な方法、または
手動で登録解除方法をご存知ないですか?
すべての返信
-
とっちゃんです。
削除は地道にレジストリエディタで削除しかありませんね。
もしかしたら、ツールとかあるかもしれませんが(仕組み的にはツールで作ることは可能)、調べたことがないので存在はわかりません。
ATL(正確にはComponent Object Model を採用したもの)の登録情報の削除手順としては
- HKEY_CLASSES_ROOT(以下)HKCR 直下から ProgIdを探す(2個あります)
- CLSID を取り込み HKCR\CLSID キー内から捜す
- 該当のキーに TypeLib があるので今度は HKCR\TypeLib からキーを捜す
- HKCR\AppId にも情報がある場合があるのでそれを消す(VSのバージョン依存)
- HKCR\Interface にもやはりあるのでそこからも削除する
というのが本当の手順です。
が
Inteface 部分はソースが残ってないと探しきれない(TypeLibにしか情報がないため)と思いますので、無視してしまってもいいでしょう。
ま、ごみとして残ったままでも、動作や開発に支障があるわけではありませんのでそれほど気にする必要はないかと。
-
>ですよね?(^^
ブー。はずれです(^^;
一覧情報として出てくる(コントロールのテストやOLEの貼り付けメニューなどなど)場合の検索先は、ProgId じゃなくて、CLSID のほうです。
なので、CLSID を消さないと一覧からは消えないんですよ。
CLSID\{...} のサブキーに
Control があれば、それは ActiveX コントロールとして
Insertable があれば、OLEサーバーとして
Programable があればオートメーションとして
リストされるようになっています。
#他にもいろいろと意味のあるキーはありますが(^^;
なので、不要なCLSIDを消し去りたいのなら、ツールを作るのが一番の早道かと(^^;
#古いインストーラだと、登録情報を消さないのもあるし...(インストーラ作者のチョンボ)。
ま、実害は殆どないので、気にしないというのも選択肢の一つではありますが(^^;
どのみち、開発環境は1~2年に一度くらいリフレッシュしてあげないと...ね(^^;
昔は新OSや、新VSというタイミングが定期的にあったんですがね。
今は、同居できちゃうので、なかなか新規構築までは行かないですからねぇ(^^;
-
こんにちは、スレ主のshigeです。
中博俊様
とっちゃん様
回答ありがとうこざいます。おかげさまで、やりたい事は出来ました。DLLが無い場合の登録解除ツールは結構探しましたが見つける事が出来ませんでした。ただし、レジストリクリーナーと言うツールを使えば出来るかも・・・(未検証)。
レジストリエディタでの手動削除も実際にやってみて削除できました。
>Inteface 部分はソースが残ってないと探しきれない(TypeLibにしか情報がないため)と思いますので、無視してしまってもいいでしょう。
ActiveXテストコンテナ起動で登録解除でも、Interfacesにゴミが残っていました(OLE/COMオブジェクトビューアで確認)
>どのみち、開発環境は1~2年に一度くらいリフレッシュしてあげないと...ね(^^;
最近は仮想PC環境が手軽に構築できるので、開発環境を直PCに構築は行なわない様になりました。机の上のホコリ(ゴミ)は気にしないのに、レジストリのホコリは結構気になる今日この頃でした。
それでは。
-
とっちゃんです。
shige さんからの引用 ActiveXテストコンテナ起動で登録解除でも、Interfacesにゴミが残っていました(OLE/COMオブジェクトビューアで確認)
テストコンテナの登録処理は、自己登録任せです。
なので、ごみが残るとしたら、登録解除ルーチンの内部の段取りがミスっているのではと思います。
ATL(MFCにも同様のものがある)の登録関数で、登録時に TypeLib を登録するようになっているのなら、登録解除では解除するように指定してください。
今はどうなってるかわかりませんが、確か昔のATLかMFCには登録はTypeLibを登録するのに、解除では放置という初期値の設定ミスがあったように思います。
机の上のホコリ(ゴミ)は気にしないのに、レジストリのホコリは結構気になる今日この頃でした
インストーラ作るようになるともっと気になります。でもある程度の線で割り切りは必要です(^^;