แอตทริบิวต์ 'KeyPath' ของ wix คืออะไร


125

แอตทริบิวต์ ' KeyPath ' ของ Wix คืออะไร โดยเฉพาะอย่างยิ่งมีผลอย่างไรกับสิ่งต่อไปนี้:

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

112
OMG เอกสารคู่มือ Wix นั้นไร้ประโยชน์อย่างที่สุด เอกสาร wix ระบุว่าสำหรับแอตทริบิวต์ KeyPath ถ้าคุณตั้งค่าเป็น "ใช่" ไฟล์จะถือว่าเป็นเส้นทางหลักสำหรับส่วนประกอบ มีประโยชน์มาก !!
Cheeso

5
@RobMensching - ขอขอบคุณในจิตวิญญาณและความเต็มใจที่จะมีส่วนร่วมกับชุมชน การบอกวิธีไม่บ่นนั้นไม่ดีเท่ากับการบอกฉัน (และคนอื่น ๆ ) ว่าจะบ่นอย่างไร ถ้าฉันรู้สถานที่ที่จะเลี้ยงแมลงเมื่อ 2 ปีที่แล้วฉันคงทำไปแล้ว นอกจากนี้อย่างที่คุณเห็นจากการโหวตเพิ่มเห็นได้ชัดว่าคนอื่น ๆ ก็รู้สึกเหมือนกัน อาจถึงเวลาสำหรับข้อความประเภทนี้: "ช่วยปรับปรุง WiX! โปรดเพิ่มจุดบกพร่องที่เหมาะสมโดยคลิกที่นี่ "
Cheeso

21
จะทำ @Cheeso! โปรดส่งข้อบกพร่องที่นี่: wixtoolset.org/bugs
Rob Mensching

8
@Cheeso แนวคิดหลักที่ต้องเข้าใจคือโครงการติดตั้ง WiX สร้างแพ็คเกจ Windows Installer เอกสาร WiX ไม่ (และส่วนใหญ่ไม่ควร) ทำซ้ำเอกสาร Windows Installer แม้ว่าคุณจะสามารถใช้โครงสร้าง WiX ได้โดยไม่เข้าใจตาราง Windows Installer ที่รองรับ แต่หากมีคำถามใด ๆ คุณควรตรวจสอบเอกสารบน MSDN สำหรับชิ้นส่วนเริ่มต้นที่นี่
Tom Blodget

30
@ TomBlodget: ฉันจะเถียงว่า WiX ควรทำสำเนาเอกสาร Windows Installer ซ้ำ สำหรับผู้ใช้ส่วนใหญ่การแยกตัวติดตั้ง WiX / Windows เพียงแค่ทำให้เกิดความสับสนและยิ่งสามารถซ่อนไว้ให้ผู้ใช้ปลายทางใช้เครื่องมือโดยรวมได้ง่ายขึ้น
Scott Stafford

คำตอบ:


122

ในฐานะที่เป็นอธิบายโดยร็อบ Mensching :

KeyPath สำหรับคอมโพเนนต์เป็นทรัพยากรเดียวที่ Windows Installer ใช้เพื่อตรวจสอบว่าคอมโพเนนต์ "มีอยู่" บนเครื่องหรือไม่

ซึ่งหมายความว่าเมื่อ Windows Installer ตัดสินใจว่าจะติดตั้งคอมโพเนนต์ของคุณหรือไม่ระบบจะตรวจสอบก่อนว่ามีทรัพยากรคีย์พา ธ อยู่แล้วหรือไม่ หากเป็นเช่นนั้นจะไม่มีการติดตั้งทรัพยากรใด ๆ ในคอมโพเนนต์

การมีอยู่ของทรัพยากร keypath ยังเป็นตัวกำหนดด้วยว่าส่วนประกอบได้รับความเสียหายหรือหายไปเมื่อคุณ "ซ่อมแซม" MSI

เมื่อรีซอร์ส keypath เป็นไฟล์เวอร์ชัน Windows Installer จะพิจารณาว่ามีอยู่ก็ต่อเมื่อพบไฟล์ที่มีเวอร์ชันเท่ากันหรือสูงกว่า

ในตัวอย่างเฉพาะของคุณคุณมีส่วนประกอบที่ลบโฟลเดอร์ในการถอนการติดตั้ง คอมโพเนนต์นี้จะถูกติดตั้งก็ต่อเมื่อยังไม่มีคีย์รีจิสทรีที่ระบุ เพิ่มรีจิสทรีคีย์ที่ใช้เป็นเส้นทางที่สำคัญคือเคล็ดลับที่พบบ่อยเมื่อคุณต้องการ keypath สำหรับองค์ประกอบที่ติดตั้งทรัพยากรที่ไม่สามารถนำมาใช้เป็น keypath ตัวเองเหมือนเป็นทางลัด


4
แล้วอะไรคือประเด็นในการให้ไฟล์เดียวในคอมโพเนนต์อย่างชัดเจนแอตทริบิวต์ keypath = "no"?
Christopher B.Adkins

4
@Adkins: ที่จะกดพฤติกรรมเริ่มต้นของ wix เพื่อใช้ไฟล์นั้นเป็นคีย์พา ธ ด้วยเหตุนี้จึงไม่มีการเขียนคีย์พา ธ ไปยังฐานข้อมูลตัวติดตั้งสำหรับคอมโพเนนต์นั้น ในระหว่างการติดตั้งโปรแกรมติดตั้ง windows จะใช้โฟลเดอร์ปลายทางของคอมโพเนนต์เป็นคีย์พา ธ อีกวิธีหนึ่งในการรับพฤติกรรมนี้คือการตั้งค่า "keypath = yes" บนองค์ประกอบของคอมโพเนนต์เอง ไม่ว่าในกรณีใดฉันก็ดูเหมือนจะไม่ดี
Wim Coenen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.