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


124

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

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

111
OMG Wixのドキュメントはまったく役に立ちません。wix docは、KeyPath属性について、「はい」に設定すると、ファイルはコンポーネントのキーパスとして扱われると述べています。すごい!
Cheeso、

5
@RobMensching-あなたの精神とコミュニティに貢献する意欲に感謝します。文句を言わない方法を私に言うことは、私(および他の人)に文句を言う方法を教えるほどよくありません。バグを発生させる場所を2年前に知っていたら、それを実行したでしょう。また、賛成投票でわかるように、他の人も同じように感じています。たぶん、この種のメッセージのためにそれの時間:「!ヘルプのWiXを改善するには、クリックすることで、適切なバグを上げてくださいHERE」。
Cheeso 2013年

21
やります、@ Cheeso!ここにバグを報告して
Rob Mensching 2013年

8
@Cheeso理解すべき重要な概念は、WiXセットアッププロジェクトがWindowsインストーラーパッケージを構築することです。WiXのドキュメントは、Windowsインストーラのドキュメントと重複していません(ほとんどの場合、重複してはいけません)。多くの場合、サポートするWindowsインストーラーテーブルを理解していなくてもWiX構造を使用できますが、質問がある場合は、MSDNのドキュメントを確認してください。コンポーネントについては、ここから始めてください
Tom Blodget 2013

30
@TomBlodget:WiXはWindowsインストーラーのドキュメントを複製する必要があると主張します。ほとんどのユーザーにとって、WiX / Windowsインストーラーの分割は混乱を招くだけであり、エンドユーザーに隠すことができるほど、ツール全体が使いやすくなります。
スコットスタッフォード

回答:


122

ロブMenschingによって説明しました

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

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

キーパスリソースの存在によって、MSIを「修復」したときにコンポーネントが破損しているか、コンポーネントがなくなっているかどうかも判別されます。

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

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


4
それでは、コンポーネント内の唯一のファイルにkeypath = "no"属性を明示的に指定する意味は何でしょうか。
クリストファーB.アドキンス2010

4
@Adkins:wixのデフォルトの動作を抑制して、そのファイルをキーパスとして使用します。その結果、そのコンポーネントのインストーラーデータベースにキーパスは書き込まれません。インストール中に、Windowsインストーラーはコンポーネントの宛先フォルダーをキーパスとして使用します。この動作を実現する別の方法は、コンポーネント要素自体に「keypath = yes」を設定することです。いずれにせよ、それは私には良い考えのようには思えません。
Wim Coenen、2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.