wixでコンポーネントGUIDを変更しますか?
-
05-07-2019 - |
質問
WIXでコンポーネントGUIDを変更する必要があるのはいつですか? Microsoft SDKの情報はわかりにくい。
Glytzhkof編集:明確にするために、MSIコンポーネントのコンポーネントGUIDをいつ変更する必要があるかについて質問します。コンポーネントは、宛先パスの変更、同じコンポーネントへのファイルの追加または削除、レジストリデータの追加などの側面で変更できます。これにより、いわゆるコンポーネント参照、つまり MSIのコンポーネント作成のベストプラクティス。
解決
MSIの全体的な概念は、 1:1マッピングが コンポーネントGUID (一意の識別子)および絶対パス (インストール場所/キーパス)。ファイル名を含むフルパス どれか。自動魔法のように対処する新しいWix機能については、以下の更新を参照してください これで。
私はいくつかのシンプルなルールを使用して、過度に複雑で無意味なコンポーネントルールを処理します。
- 常にファイルごとに個別のコンポーネントを使用します(バイナリ以外でも)。これにより、あらゆる種類の問題が回避されます。いくつかの例外があります。
- マルチファイル.NETアセンブリは、常に単一のユニットとしてインストール/アンインストールする必要があるため、すべて1つのコンポーネントに含める必要があります。
- その他のいくつかの一般的なファイルの種類には、"一致するペア" があります-それらは一緒に属しています。多くの場合、これらはコンテンツファイルとインデックスファイルです。例として、Microsoftヘルプファイルを検討します。
- .HLPおよび.CNTファイルは一緒に属します。
- .CHMおよび.CHIファイルは一緒に属します。
- 複数のこのようなファイルタイプが一緒に属している可能性があるため、同じコンポーネントに入れて一緒にインストール/アンインストールする必要があります。特定の証明書ファイルが候補になると思われます。明確なリストを思い付くのは難しいです。 "これらのファイルは常に一緒になっていますか" を自問してください-新しいバージョンがあるときは常にペアで表示されますか?はいの場合、同じコンポーネントを介してインストールします。バージョン管理されたファイルがあれば、それをキーファイルとして設定します。
- ドライバーファイルを常に一緒に属するファイルの束の例として追加したい:
SampleDriver.cat
、 < code> SampleDriver.inf 、SampleDriver.sys
、SampleDriver.cer
。これらはすべて「ユニット」として一致する必要があります。展開用。
- コンポーネントにGUIDを割り当てると、そのコンポーネントのキーパス(絶対パス)に石が設定されることに注意してください。ファイルを新しい場所に移動するか、ファイルの名前を変更する場合は、新しいコンポーネントのGUIDを指定します(絶対パスが異なるため、事実上新しいIDです)。
- 要約すると、GUIDは特定のファイルではなく、絶対的なインストール場所に関連付けられています。 GUIDは、移動してもファイルを追跡しません。 GUID参照は、ファイル自体ではなく、絶対的な場所をカウントします。
- 既存のコンポーネントにファイルを追加または削除しないでください。あらゆる種類のアップグレードおよびパッチ適用の問題が発生します。これが、一般的なルールとしてコンポーネントごとに1つのファイルが好きな理由です。
- コンポーネントの参照にはさらに多くの機能がありますが、「概要」のためにそれをそのままにします。
一部のサンプル:
- ファイルの名前を C:\ Program Files \ MyCompany \ MyApp \ MyFile.exe から C:\ Program Files \ MyCompany \ MyApp \ MyFile_NEW.exe に変更します。これはコンポーネント作成にとって何を意味しますか?これは新しい絶対インストールパスなので、ホスティングコンポーネント用に新しいGUIDを生成するか、新しいコンポーネントを追加して古いコンポーネントを削除します(同じ効果があります)。
- 更新されたMSIは、MyFile.exeの新しいバージョンを提供します。場所は以前と同じです。つまり、コンポーネントのGUIDは変更されません。同じファイル(ID)であり、バージョンが異なるだけです。
更新:WIXに新しい コンポーネントGUIDの自動生成 機能 GUIDを計算 ターゲットパスが同じである限り。私はこれを正直に試してみませんでしたが、多くは問題なくそれを使用しているようです、そして<
他のヒント
Component / @ Guidを変更することはありません。また、コンポーネントのリソースのセット(ファイル、レジストリキー、ショートカット、TypeLibなど)を変更することもありません。新しいリソースがある場合、新しい@Guidを使用して新しいコンポーネントを作成する必要があります。本当にトリッキーな部分は、新しいコンポーネントが古いコンポーネントとオーバーラップ(ファイルパス、レジストリキーパス、またはtypelibなど)を持たないことです。
これらは基本的にコンポーネントルールです。チェックアウト: http: //robmensching.com/blog/posts/2003/10/18/Component-Rules-101 。
WiXチュートリアル、The Filesをご覧ください。内部、コンポーネントルールの詳細な説明。基本的に、古いコンポーネントを孤立させて新しいコンポーネントを作成することを意味するため、コンポーネントのGUIDを変更することはないということです。