2011-12-20 36 views
6

Chúng tôi đang sử dụng WiX 3.5 để xây dựng trình cài đặt cho một trong các sản phẩm của chúng tôi. Để đơn giản, chúng tôi xử lý nâng cấp phiên bản thông qua một nâng cấp lớn, như vậy:WiX - Duy trì cài đặt đăng ký khi nâng cấp chính

<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="Laterversionfound" /> 

Chúng tôi không chỉ định Schedule thuộc tính, có nghĩa là hành động RemoveExistingProducts nên chạy sau "InstallValidate" - có nghĩa là một gỡ bỏ cài đặt đầy đủ các phiên bản cũ sẽ diễn ra, trước khi cài đặt phiên bản mới.

Chúng tôi cài đặt một số cài đặt đăng ký HKLM mà người dùng phải định cấu hình cài đặt sau. Vì nâng cấp lớn thực hiện gỡ cài đặt đầy đủ, sau đó cài đặt lại, chúng tôi sẽ mất cài đặt do người dùng xác định trong sổ đăng ký. Lý tưởng nhất, chúng tôi cần để có thể giữ những nâng cấp này.

thành phần khóa registry của tôi trông như thế này:

<Component Id="regserver" Guid="[guid]"> 
    <RegistryValue Root="HKLM" Key="Software\Our Company\Our Product" Name="Server" Value="" Type="string" KeyPath="yes" /> 
</Component> 

tôi đã cố gắng thiết lập các thuộc tính của các thành phần để "có" NeverOverwrite nhưng điều này có tác dụng không mong muốn của thất bại trong việc tái tạo các phím - có lẽ vì nó kiểm tra xem các khóa có tồn tại hay không trước khi gỡ cài đặt xảy ra (rõ ràng là chúng hoạt động), sau đó chúng được gỡ bỏ bằng cách gỡ cài đặt nhưng không được tạo lại.

Tôi cũng đã thử đặt thuộc tính "RemoveFeatures" trên phần tử MajorUpgrade để xóa mọi thứ trừ các phím reg. Điều này để lại hai phiên bản của sản phẩm được cài đặt mặc dù, vì tính năng chứa các phím reg thuộc về phiên bản cũ.

Bước tiếp theo của tôi là thử lên lịch tùy chọn RemoveExistingProducts tại một điểm khác, mặc dù tôi đang mong đợi một số cơn đau nhất định với một số hành động tùy chỉnh của chúng tôi.

Vì vậy, câu hỏi của tôi là, có cách nào để đạt được những gì chúng tôi cần, mà không thay đổi nơi RemoveExistingProducts được lên lịch?

+0

Bạn có thể thay đổi trình cài đặt gốc không? Nếu vậy bạn có thể làm cho thành phần đăng ký vĩnh viễn, điều đó có nghĩa là nó sẽ không bị gỡ cài đặt. –

+0

Tôi có nghĩ rằng điều này sẽ để cài đặt xung quanh ngay cả khi sản phẩm đã được gỡ cài đặt? Lý tưởng nhất, tôi muốn loại bỏ hoàn toàn sạch sẽ cho khách hàng của chúng tôi –

Trả lời

9

Sử dụng RegistrySearch để tải các giá trị hiện tại vào các thuộc tính, sau đó sử dụng [PROPERTY] trong RegistryValue để ghi các giá trị đó. Nếu không có sản phẩm cũ hơn được cài đặt, các thuộc tính sẽ giữ giá trị mặc định của chúng.

+0

Hoàn hảo - cảm ơn Bob –

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