Apa itu atribut 'KeyPath' wix?

125

Apa itu atribut ' KeyPath ' Wix ? Secara khusus, bagaimana ini berlaku untuk berikut ini:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>
Seth
sumber
112
OMG dokumentasi Wix sama sekali tidak berguna. Dokumen wix mengatakan, untuk atribut KeyPath, jika Anda menyetelnya ke "Ya" maka file tersebut akan diperlakukan sebagai jalur kunci untuk komponen tersebut. Sangat membantu !!
Cheeso
5
@RobMensching - hargai semangat dan kesediaan Anda untuk berkontribusi pada komunitas. Memberitahu saya bagaimana untuk TIDAK mengeluh tidak sebaik memberitahu saya (dan orang lain) bagaimana cara mengeluh. Jika saya tahu tempat untuk meningkatkan bug, 2 tahun yang lalu, saya akan melakukannya. Juga, seperti yang Anda lihat dari upvote, ternyata orang lain juga merasakan hal yang sama. Mungkin sudah waktunya untuk pesan seperti ini: "Bantu tingkatkan WiX! Harap laporkan bug yang sesuai dengan mengklik DI SINI ".
Cheeso
21
Akan dilakukan, @Cheeso! Silakan laporkan
Rob Mensching
8
@Cheeso Konsep utama untuk dipahami adalah bahwa proyek Penataan WiX membangun paket Penginstal Windows. Dokumen WiX tidak (dan sebagian besar tidak boleh) menduplikasi dokumen Penginstal Windows. Meskipun Anda sering dapat menggunakan konstruksi WiX tanpa memahami tabel Penginstal Windows yang didukungnya, jika ada pertanyaan, Anda harus memeriksa dokumen di MSDN. Untuk komponen, mulai dari sini .
Tom Blodget
30
@ TomBlodget: Saya berpendapat WiX HARUS menduplikasi dokumen Penginstal Windows. Bagi sebagian besar pengguna, pemisahan Penginstal WiX / Windows hanya menyebabkan kebingungan, dan semakin banyak yang dapat disembunyikan bagi pengguna akhir, semakin mudah keseluruhan alat untuk digunakan.
Scott Stafford

Jawaban:

122

Seperti yang dijelaskan oleh Rob Mensching :

KeyPath untuk Komponen adalah sumber daya tunggal yang digunakan Penginstal Windows untuk menentukan apakah Komponen "ada" di mesin.

Ini berarti bahwa ketika Penginstal Windows memutuskan apakah akan menginstal komponen Anda, pertama kali akan melihat apakah sumber daya keypath sudah ada. Jika ya, tidak ada sumber daya dalam komponen yang diinstal.

Kehadiran sumber keypath juga menentukan apakah komponen telah rusak atau hilang ketika Anda "memperbaiki" MSI.

Jika sumber keypath adalah file berversi, Penginstal Windows akan menganggapnya ada hanya jika menemukan file dengan versi yang sama atau lebih tinggi.

Dalam contoh spesifik Anda, Anda memiliki komponen yang menghapus folder saat pencopotan pemasangan. Komponen ini hanya akan diinstal jika kunci registri yang diberikan belum ada. Menambahkan kunci registri untuk digunakan sebagai jalur kunci adalah trik umum saat Anda memerlukan keypath untuk komponen yang menginstal sumber daya yang tidak dapat digunakan sebagai keypath itu sendiri, seperti pintasan .

Wim Coenen
sumber
4
Jadi apa gunanya secara eksplisit memberikan satu-satunya file dalam sebuah komponen atribut keypath = "no"?
Christopher B. Adkins
4
@Adkins: itu akan menekan perilaku default wix untuk mengambil file itu sebagai keypath. Akibatnya, tidak ada keypath yang ditulis ke database penginstal untuk komponen itu. Selama instalasi, penginstal windows kemudian akan menggunakan folder tujuan dari komponen sebagai keypath. Cara lain untuk mendapatkan perilaku ini adalah dengan menyetel "keypath = yes" pada elemen komponen itu sendiri. Bagaimanapun, itu sepertinya bukan ide yang bagus bagi saya.
Wim Coenen