1

私たちのプログラムのうちの2つは、同じクラスIDを持つ同じCOMサーバー(これも私たちが作成したもの)を使用しています。インストール時に各プログラムは、COMサーバーファイルをそのフォルダーにコピーし、COMサーバーにコピーしregsvr32ます。

問題は、COMサーバーをインストールして、ユーザーがプログラムのいずれかまたは両方を異なるフォルダーに任意の順序で、場合によっては異なるバージョンでインストールできるようにする方法です。明らかに、クラスIDを変更せずにそれは不可能であり、それは構成に多くの面倒です。理想的には、そのためにマニフェストを使用し、なしで使用したいと思いregsvr32ます。

問題は、reg-free COM(たとえば、ここ)について読むたびに、にversion属性があることassemblyIdentityです。バージョン番号はビルドごとに変更する必要があり、(自動的に)調整するというアイデアはまったく好きではありません。特定のバージョンへの依存関係を指定することが良い理由は理解できますが、このシナリオではまったく役に立ちません。

COMサーバーとコンシューマーの両方のマニフェストを記述して、バージョンを指定せず、フォルダー内にあるファイルのバージョンを操作する方法はありますか?また、検索をコンシューマーと同じフォルダーに制限する方法はありますか?

4

1 に答える 1

0

Windows は、アプリケーション ディレクトリが続くグローバルな場所でのみマニフェストを検索します。グローバルに何もインストールしない場合、検索は実質的に同じフォルダーに制限されます。

COM クライアントと同じフォルダーに COM サーバーを常に出荷している場合、それらは実質的に 1 つの "ソフトウェア ユニット" になります。version考慮事項は、異なるソフトウェア ユニット間のインターフェイス コントラクトであるため、シナリオでは問題になりません。ID からバージョン属性を省略するか、「1.0.0.0」のような固定値に設定することができます。その時点で、適切なバージョン管理ストーリーを保証するのはソフトウェアの配布方法次第であり、サイドではありません。バイサイドシステム。

于 2010-11-24T06:01:33.940 に答える