Thuộc tính 'KeyPath' của wix là gì?


124

Thuộc tính Wix ' KeyPath ' là gì? Cụ thể, nó áp dụng như thế nào cho những điều sau đây:

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

111
OMG tài liệu Wix hoàn toàn vô dụng. Tài liệu wix nói, đối với thuộc tính KeyPath, nếu bạn đặt nó thành "Có" thì tệp được coi là đường dẫn chính cho thành phần. Thật là hữu ích !!
Cheeso

5
@RobMensching - đánh giá cao tinh thần và sự sẵn sàng đóng góp cho cộng đồng của bạn. Nói với tôi làm thế nào để KHÔNG phàn nàn là không tốt như nói với tôi (và những người khác) làm thế nào để phàn nàn. Nếu tôi biết nơi để phát sinh lỗi, 2 năm trước, tôi đã làm điều đó. Ngoài ra, như bạn có thể thấy bởi các upvote, rõ ràng những người khác cũng cảm thấy tương tự. Có lẽ đã đến lúc cho loại tin nhắn này: "Giúp cải thiện WiX! Vui lòng nêu ra các lỗi thích hợp bằng cách nhấp vào ĐÂY ".
Cheeso

21
Sẽ làm được, @Cheeso! Vui lòng gửi lỗi tại đây: wixtoolset.org/bugs
Rob Mensched

8
@Cheeso Khái niệm chính cần hiểu là dự án Thiết lập WiX xây dựng gói Windows Installer. Các tài liệu WiX không (và hầu hết không nên) sao chép các tài liệu Windows Installer. Mặc dù bạn có thể thường xuyên sử dụng cấu trúc WiX mà không hiểu các bảng Windows Installer mà nó hỗ trợ, nếu có bất kỳ câu hỏi nào, bạn nên kiểm tra các tài liệu trên MSDN. Đối với các thành phần, bắt đầu ở đây .
Tom Blodget

30
@TomBlodget: Tôi muốn tranh luận WiX NÊN sao chép tài liệu Windows Installer. Đối với hầu hết người dùng, việc phân chia WiX / Windows Installer chỉ gây ra sự nhầm lẫn và càng có thể bị ẩn đối với người dùng cuối thì công cụ tổng thể càng dễ sử dụng.
Scott Stafford

Câu trả lời:


122

Theo giải thích của Rob Mensching :

KeyPath cho Thành phần là một tài nguyên duy nhất mà Trình cài đặt Windows sử dụng để xác định xem Thành phần có "tồn tại" trên máy không.

Điều này có nghĩa là khi Windows Installer quyết định có cài đặt thành phần của bạn hay không, trước tiên, nó sẽ xem liệu tài nguyên đường dẫn có hiện diện hay không. Nếu có, không có tài nguyên nào trong thành phần được cài đặt.

Sự hiện diện của tài nguyên khóa cũng xác định xem một thành phần đã bị hỏng hoặc bị mất khi bạn "sửa chữa" MSI.

Khi tài nguyên khóa là một tệp được phiên bản, Windows Installer sẽ xem xét nó chỉ tồn tại nếu nó tìm thấy một tệp có phiên bản bằng hoặc cao hơn.

Trong ví dụ cụ thể của bạn, bạn có một thành phần loại bỏ một thư mục khi gỡ cài đặt. Thành phần này sẽ chỉ được cài đặt nếu khóa đăng ký đã cho chưa tồn tại. Thêm khóa đăng ký để sử dụng làm đường dẫn khóa là một mẹo phổ biến khi bạn cần một đường dẫn khóa cho một thành phần cài đặt các tài nguyên không thể được sử dụng làm đường dẫn chính, như phím tắt .


4
Vậy thì điểm nào trong việc đưa ra tệp duy nhất trong một thành phần một thuộc tính keypath = "no"?
Christopher B. Adkins

4
@Adkins: điều đó sẽ thay thế hành vi mặc định của wix để lấy tệp đó làm keypath. Kết quả là, không có keypath nào được ghi vào cơ sở dữ liệu cài đặt cho thành phần đó. Trong quá trình cài đặt, trình cài đặt windows sẽ sử dụng thư mục đích của thành phần làm đường dẫn khóa. Một cách khác để có hành vi này là đặt "keypath = yes" trên chính thành phần thành phần. Trong mọi trường hợp, nó dường như không phải là một ý tưởng tốt cho tôi.
Wim Coenen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.