ActiveXの登録/未登録をチェックする方法について

解決


Hana2569  2013-12-04 18:45:58  No: 103469  IP: [192.*.*.*]

WindowsAPIなどでActiveXなどが(正常に)登録されているかどうかを調べるコマンドはありますでしょうか。
または毎回登録しなくてもよい方法はありますでしょうか。

あるサードパーティ製の再配布可能なActiveXコンポーネントが、最近インストール時にCOM抽出または自己登録されなくなりました。
直接の原因が特定できず、止むを得ずにアプリケーション起動時に毎回 comspec %systemroot%\system32(または\Syswow64)\regsvr32.exe /S %systemroot%\system32(または\Syswow64)\xxxx.ocx を使い非表示にて登録させています。

すでに利用可能な状態になっているにもかかわらず、アプリケーション起動時に無条件で毎回登録させていますがこれが問題になることはありますでしょうか。(もちろんアプリケーションのアンインストール時にこのActiveXだけ登録情報が残ってしまう可能性があることは理解しています。)

regsvr32 /U hoge と regsvr32 hoge の前後でレジストリの差分をとり比較してみると当該GUIDだけでなく多くのキーや値が登録されているようなので、一概にレジストリでGUIDの登録があるからActiveXが使用可能であるという保証は無いように見受けられます。

よろしくお願い致します。

編集    削除
魔界の仮面弁士  2013-12-05 22:13:00  No: 103470  IP: [192.*.*.*]

> (正常に)登録されているかどうかを調べるコマンドはありますでしょうか。
厳密な調査は、そのコンポーネントの開発者でないと無理でしょうけれども、
簡易的なチェックであれば、その ActiveX の呼び出し(CreateObject等)が
失敗するかどうかで判定してみるとか。


> 直接の原因が特定できず、
いわゆる「DLL Hell」状態に陥っているような気もします。
複数バージョンのDLLなどが同じエントリを登録しあってしまい、
特定の機能を呼び出した後で、他方の機能が使えなくなってしまうなど。


> あるサードパーティ製の再配布可能なActiveXコンポーネントが、最近インストール時にCOM抽出または自己登録されなくなりました。
その件について、メーカー側はどのような見解でしたか?


> 多くのキーや値が登録されているようなので
タイプライブラリがあれば型情報も含まれますしね。

そもそも REGSVR32 は、各DLLの DllRegisterServer / DllUnregisterServer を
呼び出しているわけで、その中でどのレジストリキーを操作しているのかは
外部からは分かりません。しくみ的には、レジストリ操作以外の
カスタム動作(アクティベーション等)が含まれる可能性もありますし。

編集    削除
Hana2569  2013-12-09 22:33:33  No: 103471  IP: [192.*.*.*]

魔界の仮面弁士さま

丁寧にご返信くださり誠に有難うございます。
REGSVR32の処理内容を考えるとその状態を外部からチェックすることが
難しい、ということがよく理解(納得)できました。
今回は結果として性能ではなく登録が不全ということが明確なため、
おっしゃるとおり呼び出しのエラー有/無を返す関数を使って対処します。
メーカからの回答はまだ得られておりませんが引き続き確認します。

編集    削除