1

ClickOnceを介して使用できるようにアプリケーションを調整する必要があります。このアプリケーションは、.exeファイルと膨大な数のVisual C ++ライブラリで構成されており、それらの一部は、他のライブラリで使用されるインプロセスCOMサーバーです。

現在、インストーラーはregsvr32COMサーバーを登録しますが、ClickOnceアプリケーションはインストール中にレジストリを変更することを許可されていないようです。だから私たちは何か他のものが必要です。

オプション1は、削除CoCreateInstance()して代わりにLoadLibraryEx()/を使用することDllGetClassObject()です。これにはコードの変更が必要ですが、非常に信頼性があります。これが機能しない理由はわかりません。

オプション2は、マニフェストとサイドバイサイドCOMアクティベーションを使用することです。私がすぐに目にする問題は、ナイトリービルドごとにバージョン番号をインクリメントするため、マニフェストを自動的に更新する必要があることです。それはあまり刺激的ではありません。サイドバイサイドCOMアクティベーションを使用することのその他のそれほど明白ではない制限は何ですか?

4

1 に答える 1

1

side-by-side COM の利点は、コードを変更せずに問題を解決できることです。side-by-side COM を既存の COM コンポーネントのセットに後付けすることができます。

欠点:

  • サイド バイ サイドは (COM を使用しない VC++ ランタイム ライブラリや Windows コモン コントロールなどのいくつかのコンポーネントを除いて) 広く使用されている手法ではなく、Web でトラブルシューティング情報を見つけるにはある程度の労力が必要です。
  • XP または Server 2003 を使用している場合、問題が発生したときに OS からの支援は得られません。特に、XP はイベント ログに誤解を招くメッセージを出力します。2k3の方がいいです。Vista 以降では、sxstraceツールが提供されます。
  • コンポーネント自体と並行して、マニフェスト ファイルを維持する必要があります。多くの点で、マニフェスト ファイルは既にタイプ ライブラリにある情報と重複しています。これらは手作業で管理できますが (かなり単純なスキーマを持つ XML ファイルです)、ビルドを行うたびに再生成することをお勧めします。これにより、バージョン管理の問題が解決されます。
于 2010-08-09T08:37:05.680 に答える