Phần tử Nâng cấp bên trong phần tử Sản phẩm, kết hợp với lập lịch hành động thích hợp sẽ thực hiện gỡ cài đặt bạn sau. Hãy chắc chắn liệt kê các mã nâng cấp của tất cả các sản phẩm bạn muốn loại bỏ.
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="00000000-0000-0000-0000-000000000000">
<UpgradeVersion Minimum="1.0.0.0" Maximum="1.0.5.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
Lưu ý rằng, nếu bạn cẩn thận với các bản dựng của mình, bạn có thể ngăn mọi người vô tình cài đặt phiên bản cũ hơn của sản phẩm so với phiên bản mới hơn. Đó là những gì trường tối đa dành cho. Khi chúng tôi xây dựng trình cài đặt, chúng tôi đặt Nâng cấp tối đa cho phiên bản đang được xây dựng, nhưng Bao gồmMaximum = "không" để ngăn tình huống này.
Bạn có các lựa chọn liên quan đến việc lên lịch cho RemoveEx hiệnSản phẩm. Tôi thích lập lịch cho nó sau InstallFinalize (thay vì sau InstallInitialize như những người khác đã khuyến nghị):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Điều này để lại phiên bản trước của sản phẩm được cài đặt cho đến sau khi các tệp và khóa đăng ký mới được sao chép. Điều này cho phép tôi di chuyển dữ liệu từ phiên bản cũ sang phiên bản mới (ví dụ: bạn đã chuyển lưu trữ tùy chọn người dùng từ sổ đăng ký sang tệp XML, nhưng bạn muốn lịch sự và di chuyển cài đặt của họ). Việc di chuyển này được thực hiện trong một hành động tùy chỉnh bị trì hoãn ngay trước InstallFinalize.
Một lợi ích khác là hiệu quả: nếu có các tệp không thay đổi, Windows Installer không cần sao chép lại chúng khi bạn lên lịch sau InstallFinalize. Nếu bạn lên lịch sau InstallInitialize, phiên bản trước sẽ bị xóa hoàn toàn trước, và sau đó phiên bản mới được cài đặt. Điều này dẫn đến việc xóa và sao chép các tập tin không cần thiết.
Đối với các tùy chọn lập lịch khác, hãy xem chủ đề trợ giúp RemoveEx hiệnSản phẩm trong MSDN. Tuần này, liên kết là: http://msdn.microsoft.com/en-us/l Library / aa371197.aspx