3

からMyCOMAddin.tlb抽出した というタイプ ライブラリがあります。これは、C# で記述された .NET COM 公開クラスです。この dll は、ユーザー レベルごとに登録されます。tlbexp.exeMyCOMAdd.dll

質問は

  • MyCOMAddin.tlb現在のユーザーだけを登録する方法はありますか?

試してみregtlibv12.exeましたが、すべてのユーザーに登録されます。ユーザーがアドインをマシンからアンインストールすると、遅延バインディングで dll にアクセスできる他のユーザーがタイプ ライブラリにアクセスできなくなるため、これは不便です。

アドインの展開に Inno セットアップを使用しているので、キーをレジストリに直接書き込むことができます。しかし、どのキーをどこに書き込めばよいかわかりません。

オプションがあればいいのにregtlibv12.exe/peruser

4

1 に答える 1

3

これは不可能ではありませんが、もちろん、いくつかの合併症に向かうでしょう。まず、タイプライブラリをローカルに登録するだけでは不十分です。また、CLSIDをローカルに登録する必要があります。そうしないと、正しく機能しません。Regasm.exeによって行われた仕事。regtlibを実行するよりも、/ tlbコマンドラインオプション(ファイルなし)を優先してください。また、タイプライブラリを使用するプログラミングツールでは、ライブラリをコンポーネントとして認識するために追加のレジストリキーが必要になる場合があることに注意してください。たとえば、「Control」キーが一般的です。

プロのインストーラーは、インストール時にキーを書き込むためにRegasmやRegtlibなどのツールに依存せず、キーを自分で書き込みます。もちろん、これらのキーが何であるかを知る必要があります。1つの方法は、インストールツールがSysInternalsのProcMonユーティリティを使用してキーを書き込むのを観察することです。それは多くの情報を生成する傾向がありますが。WiXプロジェクトには専用のツールがあります。Heat.exeは「収集」ツールです。HKCRまたはHKLMの使用から、代わりにHKCUの使用まで、その方法で見つけたすべてを変更します。HKCRはHKCU\Software\Classesにマップされます。おそらく、64ビットオペレーティングシステム用にWow6432Nodeが追加されています。

また、実際にタイプライブラリを登録する必要があることを確認してください。別のプログラミング環境でコンポーネントを使用している場合にのみ必要です。また、STAスレッドで作成されたオブジェクトを使用し、それを別のスレッドから呼び出すというコーナーケースでは、タイプライブラリは、標準のマーシャラーがアパートメント間で呼び出しをマーシャリングするために使用します。また、マニフェストを使用したreg-free COMを忘れないでください。これにより、レジストリを変更する必要がまったくなくなります。それがここに当てはまるかどうかは明らかではありません。

于 2012-08-05T16:05:45.827 に答える