30

WIXでコンポーネントGUIDを変更する必要があるのはいつですか? MicrosoftSDKの情報は紛らわしいです。

Glytzhkof編集:明確にするために、質問は、MSIコンポーネントのコンポーネントGUIDをいつ変更する必要があるかを扱います。コンポーネントは、宛先パスの変更、同じコンポーネントとの間のファイルの追加または削除、レジストリデータの追加などの側面で変更される可能性があります。これにより、いわゆるコンポーネント参照に関して問題が発生します MSIでコンポーネントを作成します。

4

3 に答える 3

50

MSI の全体的な概念は、コンポーネント GUID (一意の識別子) と絶対パス (インストール場所/キー パス)の間に1:1 のマッピングがあることです。ファイル名を含むフル パス (存在する場合)。これを自動的に処理する新しい Wix 機能については、以下の更新を参照してください。


ロブ・メンシング (WiX 作者):

コンポーネント ルールの詳細:


非常に複雑で直感に反するコンポーネント ルールに対処するために、いくつかの単純なルールを使用します (特に、展開の専門家ではなく開発者向け)。

  • 常にファイルごとに個別のコンポーネントを使用します (非バイナリの場合でも)。これにより、あらゆる種類の問題が回避されます。いくつかの例外があります:
    • 複数ファイルの .NET アセンブリは、常に 1 つのユニットとしてインストール/アンインストールする必要があるため、すべて 1 つのコンポーネントにする必要があります。
    • 他のいくつかの一般的なファイル タイプは、「一致するペア」で提供されます。それらは一緒に属します。多くの場合、これらはコンテンツ ファイルとインデックス ファイルです。例として、Microsoft ヘルプ ファイルを考えてみます。
      • .HLP ファイルと .CNT ファイルは一緒に属します。
      • .CHM と .CHI ファイルは一緒に属します。
    • 一緒に属するそのようなファイルタイプがいくつかある可能性が高いため、同じコンポーネントに配置して、一緒にインストール/アンインストールする必要があります-特定の証明書ファイルが候補であると思われます。明確なリストを作成するのは困難です。「これらのファイルは常に一緒に属しているのか」と自問してみてください。つまり、新しいバージョンがあるときは常にペアで表示されるのでしょうか? はいの場合は、同じコンポーネントを介してインストールします。バージョン管理されたファイルがある場合は、キー ファイルとして設定します。
    • 常に一緒に属している一連のファイルの例として、ドライバーファイルを追加したいと思います。それらはすべて、展開の「単位」として一致する必要があります。SampleDriver.catSampleDriver.infSampleDriver.sysSampleDriver.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) です。

更新

自動コンポーネント GUID : WIX には、ターゲット パスが同じである限りauto-generate component GUID機能がcalculates a GUID正直なところ、試したことはありませんが、多くの人が問題なく使用しているようですRob Mensching (Wix author) states it is safe for normal use。コンセプトとしては、これを強くお勧めします。これは、いくつかの自動魔法を備えており、複雑さからあなたを守ってくれるからです。

最小限の WiX マークアップ: また、Wix xml ファイルから多くのソース属性を除外し、値をハード コーディングする代わりに Wix のデフォルトに依存できることにも注意して

于 2009-09-14T15:02:32.470 に答える
18

Component /@Guidを変更することはありません。また、コンポーネントのリソースのセット(File、RegistryKey、Shortcut、TypeLibなど)を変更することはありません。新しいリソースがある場合は、新しい@Guidを使用して新しいコンポーネントを作成する必要があります。本当に注意が必要なのは、新しいコンポーネントが古いコンポーネントと重複しないことです(ファイルパス、レジストリキーパス、typelibなど)。

これらは基本的にコンポーネントルールです。https ://robmensching.com/blog/posts/2003/10/18/component-rules-101/を確認してください。

于 2009-09-10T14:29:05.013 に答える
0

コンポーネントルールの詳細な説明については、 WiXチュートリアルのTheFilesInsideを参照してください。基本的に、コンポーネントのGUIDを変更しないことを示しています。これは、古いコンポーネントを孤立させ、新しいコンポーネントを作成することを意味するためです。

于 2009-09-10T12:55:26.283 に答える