web-dev-qa-db-ja.com

wixの 'KeyPath'属性とは何ですか?

Wixの「KeyPath」属性とは何ですか?特に、以下にどのように適用されますか?

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>
118
Seth

Rob Menschingによる説明

コンポーネントのキーパスは、Windowsインストーラがコンポーネントがマシン上に「存在する」かどうかを判断するために使用する単一のリソースです。

これは、Windowsインストーラーがコンポーネントをインストールするかどうかを決定するときに、キーパスリソースが既に存在するかどうかを最初に調べることを意味します。そうである場合、コンポーネント内のリソースはどれもインストールされません。

キーパスリソースの存在は、MSIを「修復」するときにコンポーネントが破損したか、行方不明になったかを決定します。

キーパスリソースがバージョン管理されたファイルである場合、Windowsインストーラーは、同等またはそれ以上のバージョンのファイルを検出した場合にのみ、それが存在すると見なします。

具体的な例では、アンインストール時にフォルダーを削除するコンポーネントがあります。このコンポーネントは、指定されたレジストリキーがまだ存在しない場合にのみinstalledになります。 ショートカット のように、キーパス自体として使用できないリソースをインストールするコンポーネントのキーパスが必要な場合、キーパスとして使用するレジストリキーを追加するのが一般的なトリックです。

113
Wim Coenen