2009-10-21 31 views
60

Tôi có nên bọc tất cả các tệp tôi muốn cài đặt trong các thành phần riêng lẻ không? Lợi thế của việc đưa một số tệp vào một thành phần là gì?Wix: một tệp cho mỗi thành phần hoặc một vài tệp cho mỗi thành phần?

+0

Một số cụm ** nhất định ** là ** nhiều tệp **, nhưng phải được bao gồm trong cùng thành phần MSI vì chúng phải được cài đặt dưới dạng đơn vị ** ** nguyên tử **. Nói cách khác, họ nên luôn cài đặt và gỡ cài đặt với nhau như một gói. –

+0

Ngoài tập hợp nhiều tệp .NET, tôi luôn sử dụng một tệp cho mỗi thành phần, vì nó tránh tất cả các loại vấn đề về nâng cấp và triển khai. –

Trả lời

75

Một lý do cho "một tệp cho mỗi thành phần" là resiliency. Khi một ứng dụng được khởi động, Windows Installer có thể kiểm tra xem có thiếu keypath của bất kỳ thành phần nào không. Nếu đường phím bị thiếu, thành phần được cài đặt lại/sửa chữa.

Nếu thành phần có nhiều tệp, thì chỉ một tệp có thể là đường phím. Trong wix bạn chỉ ra điều này bằng cách thiết lập KeyPath=yes trên một phần tử File. Các tệp khác sau đó sẽ không được bảo vệ hoàn toàn bằng khả năng phục hồi của Windows Installer. Chúng sẽ chỉ được cài đặt lại nếu tệp keypath bị thiếu.

Một lý do khác để có "một tệp cho mỗi thành phần" là khi cài đặt tệp vào các vị trí mà chúng có thể đã có mặt (ví dụ: nâng cấp ứng dụng hoặc khi cài đặt lên c:\windows\system32). Trình cài đặt Windows xác định xem một thành phần có cần được cài đặt hay không bằng cách kiểm tra đường phím. Nếu đường phím là tệp và tệp đã có (với cùng phiên bản hoặc cao hơn) thì thành phần là không phải được cài đặt. Đó là vấn đề nếu các tệp khác trong thành phần thực sự cần được cài đặt/nâng cấp.

+7

Đây là một câu trả lời tuyệt vời nhưng không cho biết lý do đảo ngược lại hữu ích. Đó là hợp lý, vì tôi chỉ biết một lợi thế: bạn tiết kiệm một số thời gian đăng ký trong khi cài đặt, vì mỗi thành phần được đăng ký, nhưng mỗi tập tin của nó thì không. Điều này thường không phải là một sự cân bằng tốt, vì nó giết chết khả năng phục hồi và cản trở việc nâng cấp, vì vậy hãy chú ý hơn đến đề xuất của wcoenen. –

+0

@Wim Coenen Khi sử dụng phương pháp "tệp cho mỗi thành phần", người ta nên đặt KeyPath = "có" trên Tệp, nhưng về thành phần của nó thì sao? Có cần thiết phải thêm cùng một KeyPath = "có" vào thành phần gốc của File không? Hơn nữa, những gì về Directory? Thực hành tốt nhất với các thư mục (trống và không trống) là gì? Có hướng dẫn tốt về điều này không? Cảm ơn!!! – zam6ak

+0

@ zam6ak: nhận xét không phải là nơi tốt nhất để đặt câu hỏi mới, vì chúng chỉ nhận được sự chú ý hạn chế và không thể chứa các câu trả lời kỹ lưỡng. Vui lòng đăng câu hỏi riêng thay vì nhận xét! –

Các vấn đề liên quan