2009-10-09 38 views
8

Hiện tại tất cả các nâng cấp đều hoạt động tốt bất cứ khi nào cập nhật lên một số phiên bản mới hơn, tuy nhiên tôi nhận được một hành vi kỳ lạ khi hạ cấp. Có vẻ như nó sẽ gỡ cài đặt phiên bản hiện tại và sau đó cài đặt một phần phiên bản mà tôi đang cố gắng cài đặt, exe chính không tồn tại ở vị trí đích, nhưng các lối tắt được quảng cáo sẽ được tạo. Khi các phím tắt được quảng cáo được mở ra, nó sẽ hoàn thành việc cài đặt (có lẽ là làm một sửa chữa) và sau đó nó sẽ chạy tốt.WiX "Nâng cấp chính" không hoàn toàn cài đặt ứng dụng khi hạ cấp

Có ai có bất kỳ ý tưởng nào về việc điều này đang xảy ra không?

khối nâng cấp của tôi trông như thế này:

<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />

(Các IgnoreRemoveFailure là một nỗ lực để khắc phục vấn đề này, nhưng nó không xuất hiện để có làm gì)

Trong InstallExecuteSequence tôi của tôi đã <RemoveExistingProducts After="InstallValidate" />

Ngoài ra tôi có Product Id="*"Package Id="*"

Lý do hạ cấp là cần thiết vì ứng dụng khách cần chạy cùng phiên bản với máy chủ để đảm bảo khả năng tương thích và toàn bộ quá trình cần phải được tự động sao cho các phiên bản máy khách/máy chủ không khớp khi đăng nhập người dùng chỉ có thể nhấp vào "có" và phiên bản thích hợp được tải xuống, cài đặt và bắt đầu. Điều này đang làm việc cho đến nay để nâng cấp, nhưng đối với hạ cấp một bước unintuitive thêm là cần thiết để khởi chạy lại các ứng dụng bằng tay và sau đó nhìn thấy một cửa sổ cài đặt hộp thoại bật lên trước khi nó ra mắt.

Kết quả cuối cùng là bất kể nâng cấp hoặc hạ cấp, phiên bản hiện tại cần được gỡ cài đặt hoàn toàn và phiên bản đã tải xuống được cài đặt đầy đủ, vì vậy nếu có cách khác để thực hiện điều đó, đó cũng sẽ là câu trả lời hay.

+0

Tôi có vấn đề bất tận với điều này thậm chí ngày hôm nay. WiX đã thêm một phần tử "MajorUpgrade" mới được cho là sẽ làm cho mọi thứ trở nên khó khăn hơn. Chúng tôi đang sử dụng này ngay bây giờ, nhưng ngay cả như vậy, hạ cấp có cùng một vấn đề như trước. Sự khác biệt bây giờ là nó loại bỏ một vài thủ phạm: (1) InstallExecuteSequence (2) Phần tử UpgradeVersion. – Trejkaz

Trả lời

2

Cho phép hạ cấp không được coi là thực tiễn tốt nhất, ít nhất một phần vì rất khó để kiểm tra mọi kết hợp bạn sẽ hỗ trợ trong khi vẫn có thể khắc phục chúng. Là nó không khả thi để phát hiện và chặn trường hợp này thay vì (đề nghị loại bỏ các phiên bản mới hơn đầu tiên), và chỉ tự động hỗ trợ di chuyển về phía trước?

Nếu bạn phải làm việc này, có bất kỳ điều gì trong nhật ký chi tiết về cài đặt hạ cấp (hoặc sửa chữa - bạn sẽ cần đặt chính sách ghi của máy để tạo chính sách này). (Tôi sẽ tìm gần FindRelatedProducts) hoặc thảo luận tại sao thành phần cho exe của bạn chưa được cài đặt? Chắc chắn kiểm tra bất kỳ dòng đăng nhập với SELMGR vì họ có thể giải thích điều này trong một kịch bản nâng cấp nhỏ.

Vì một lối tắt được quảng cáo được đặt ra, có vẻ như thành phần đã được quảng cáo thay thế. Điều này có thể chỉ ra các vi phạm quy tắc thành phần trong một nâng cấp nhỏ (cụ thể là việc bổ sung một thành phần trong một phiên bản mới hơn giống như loại bỏ trong phiên bản cũ hơn của bạn - xem commentary) của HeathS mặc dù nó xuất hiện Product/@Id='*'.

Bạn cũng có thể thử làm việc trong một dự án mẫu, bắt đầu từ phiên bản cơ sở có một tính năng, thành phần đơn lẻ và tệp duy nhất có lối tắt. Nếu có liên quan, hãy thêm một thành phần và tệp khác vào phiên bản được nâng cấp; nếu không chỉ cần tăng các phiên bản tập tin. Sau đó thử kịch bản ngược lại của bạn. Từ từ thêm mọi thứ vào cho đến khi bạn tìm thấy thủ phạm của mình. Sau đó, hy vọng nó là một cái gì đó bạn có thể loại bỏ từ sản phẩm thực sự của bạn, hoặc nếu không có thể được làm việc xung quanh.

1

Đề xuất của tôi là một chút về phía "làm cho nó hoạt động" - bạn có thể thử một hành động tùy chỉnh sửa chữa thầm lặng trong trường hợp hạ cấp.

+0

Tôi không thể tìm thấy cách lên lịch sửa chữa dưới dạng hành động tùy chỉnh. Bạn có bất kỳ liên kết nào mô tả điều này không? – Davy8

+0

Tôi đã suy nghĩ về một cái gì đó như chạy một hành động tùy chỉnh với msiexec và sử dụng msi của bạn như một nguồn (msiexec/fa prod.msi/qn) – Gabriel

+0

Tôi không chắc chắn bạn có thể có nhiều hơn một cửa sổ trình cài đặt chạy cùng một lúc. Trong trường hợp này sẽ có hai. Một thực thi từ bên trong khác. – w4g3n3r

0

Điều gì sẽ xảy ra nếu bạn sử dụng hai phần tử "UpgradeVersion"?

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" /> 
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" /> 
1

Bạn đặt hàng các hoạt động trong InstallExecuteSequence của bạn như thế nào?

Nếu bạn thực hiện gỡ cài đặt sau khi cài đặt (cung cấp cho bạn hiệu suất nâng cấp tốt nhất), bạn có thể gặp sự cố nếu phiên bản tệp thay đổi thành phiên bản thấp hơn; đó có thể là trường hợp trên cấp bậc của bạn.

Trình cài đặt Windows sẽ không ghi đè các phiên bản cũ hơn bằng các phiên bản mới hơn trừ khi được yêu cầu một cách rõ ràng.

Sắp xếp lại để gỡ cài đặt trước khi cài đặt sẽ giúp đỡ nếu trường hợp này xảy ra.

+0

Gỡ cài đặt được đặt trước khi cài đặt. Đã có vấn đề đó trước khi nâng cấp cho đến khi tôi lên lịch lại nó. Bây giờ nó hoạt động với nâng cấp, nhưng vẫn có vấn đề với downgrading – Davy8

3

Đây là những gì làm việc cho tôi:

<Wix ...> 
    <Product ...> 
    <Property Id="REINSTALLMODE" Value="amus" /> 
    <MajorUpgrade AllowDowngrades="yes" /> 
+0

Đây phải là câu trả lời được chấp nhận. Điều này làm việc cho tôi quá, mặc dù tôi đã sử dụng "dmus" thay vì "amus" để chỉ ghi đè lên các tập tin nếu phiên bản là khác nhau. Hoàn thành danh sách cờ ở đây: https://msdn.microsoft.com/en-us/library/aa371182%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 –

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