Benjamin Podszun の回答へのコメントで言及されている状況を考えると、あなたのアプローチは次のようになります。
- レジストリで CLSID を検索します (
HKEY_CLASSES_ROOT\CLSID\{...}
)
- 見つからない場合は、一般的なエラー メッセージが表示されるようにスローします。
- オブジェクトのタイプに応じて適切なサブキーを調べます (たとえば、インプロセス ネイティブ COM DLL/OCX の場合は InProcServer32)。デフォルト値は、DLL/OCX へのパスになります。
- このパスの存在を確認し、ファイルの名前で適切なメッセージを作成します。
これにより、OCX/DLL が移動された場合に別のメッセージを表示できますが、登録されていない場合はもちろん役に立ちません。
また、一部のクライアント マシンでコンポーネントが移動/登録解除されている理由 (または5 つの理由!) を理解するのに時間を費やすことをお勧めします。たとえば、ユーザーがバージョン 1 をインストールしてからバージョン 2 をインストールしてから、バージョン 1 をアンインストールするというシナリオが考えられます。インストーラーの実装方法によっては、バージョン 1 をアンインストールすると、バージョン 2 に必要なコンポーネントが登録解除または削除される場合があります。
もう 1 つのアプローチは、インストーラーが通常のユーザーと管理者としてどのように動作するかを確認することです。
障害が発生したクライアント マシンでのイベントの正確なシーケンスを特定するのは少し難しいかもしれませんが、試してみる価値はあります。