奇数MSIコンポーネントの規則
-
20-12-2019 - |
質問
インストール時には、以下のMSIコンポーネントルールのようなインストーラがあります。これがシナリオです:
OS:Windows 7 x64
製品Aは、コンポーネントに添付されている一連のファイルをGUID "123abc"にC:¥Program Files¥Common Files¥fooにインストールします。コンポーネントには次のファイルがあります。
foo.dll、バージョン1.0.0.0、(Keypath)
foo.sys、バージョン1.0.0.0
foo.inf、no version
foo.cat、versionなし
積B同じコンポーネントGUID "123abc"に添付されているものの同じファイルを同じパスC:¥Program Files¥Common Files¥fooにインストールします。コンポーネントには次のファイルがあります。
foo.dll、バージョン1.0.0.1、(keypath)
foo.sys、バージョン1.0.0.0
foo.inf、no version
foo.cat、versionなし
製品Aが最初にインストールされ、製品Bは製品Aのアップグレードを実行しないため、コンポーネント "123abc"を含む一般的なMSMを共有するだけです。私の期待は、製品Bがインストールされている場合、MSIはfoo.dllのキーパースバージョンを比較し、製品Bのfoo.dllが新しいことを確認します。その後、コンポーネント "123abc"に関連付けられている4つのファイルはすべて、製品Aによってインストールされたディスク上の既存のファイルを上書きします。これは起こりません。
C:\ Program Files \ Common Files \ foo
foo.dll、バージョン1.0.0.1(製品から)
foo.sys、バージョン1.0.0.0(商品Aから)
foo.inf、NOバージョン(製品Aから)
Foo.cat、NOバージョン(製品から)
DLLとCATファイルのみが上書きされます。 MSIログファイルから、次のことがわかります。
MSI (s) (4C:F0) [17:29:24:227]: File: C:\Program Files\Common Files\Foo\foo.dll; Overwrite; Won't patch; Existing file is a lower version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.sys; Won't Overwrite; Won't patch; Existing file is of an equal version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.inf; Won't Overwrite; Won't patch; Existing file is unversioned and unmodified - hash matches source file
MSI (s) (4C:F0) [17:29:24:335]: File: C:\Program Files\Common Files\Foo\foo.cat; Overwrite; Won't patch; Existing file is unversioned and unmodified - hash doesn't match source file
.
私は、鍵の内容がインストールされるかどうかに基づいて、関連するすべてのファイルをインストールしました。同じコンポーネントに関連付けられているすべてのファイルを個別に比較することができるのは何ですか?
解決
keypath状態は、コンポーネントが実行されるかどうかを決定します。コンポーネント内のリソースは、そのルールに従います。たとえば、ファイルはファイルのバージョン管理規則
他のヒント
各製品がデフォルト原価計算規則を使用していると仮定すると、共有コンポーネントを含むマージモジュールが機能します。FWIW、このマージモジュールを消費するMSIを作成してから、両方の製品のブートストラップに追加することを検討してください。パッチサービスはこのように掃除機にすることができます。