2013-02-28 33 views
21

Tôi có một dự án WiX rất đơn giản (phiên bản 3.7) cài đặt các tệp somes (một chương trình .NET phiên bản 6.0.0.0). Tôi đã sẵn sàng phát hành phiên bản 6.0.1.0 mới bằng chức năng MajorUpgrade trong WiX.nâng cấp chính wix không cài đặt tất cả các tệp

Tôi đang giữ UpgradeCode như nhau trong các yếu tố sản phẩm và tôi thay đổi phiên bản từ 6.0.0.0 đến 6.0.1.0

<Product Id="*" Name="MyApp" Version="6.0.1.0" Manufacturer="Me" 
     UpgradeCode="$(var.TheUpgradeCodeGUID)"> 

Trên một máy với 6.0.0.0 được cài đặt, tôi chạy trình cài đặt mới .

Việc xóa phiên bản cũ 6.0.0.0 chạy ok (tất cả các tệp đã được xóa), nhưng khi trình cài đặt tiếp tục cài đặt phiên bản mới, 2 tệp bị thiếu: bên thứ ba DLL và bên thứ ba EXE (chưa được thay đổi) không được cài đặt lại.

<Component Id="AutomaticUpdaterWPF.dll" Guid="*"> 
     <File Id="AutomaticUpdaterWPF.dll" Source="AutomaticUpdaterWPF.dll" KeyPath="yes" Checksum="yes" /> 
</Component> 
<Component Id="wyUpdaterProgram" Guid="*"> 
     <File Id="wyUpdaterProgram" Source="wyUpdate.exe" KeyPath="yes" Checksum="yes" /> 
</Component> 

Tất cả các file khác trong < ComponentGroup> (một số sửa đổi, một số bao gồm chưa sửa đổi. 3rd DLL bên kia) đang được lắp đặt một cách chính xác trong thời gian nâng cấp lớn.

Nếu tôi nhấp vào "sửa chữa" sau khi nâng cấp chính, 2 tệp bị thiếu sẽ xuất hiện lại. Ngoài ra, nếu tôi cài đặt phiên bản 6.0.1.0 lần đầu tiên (không nâng cấp, nhưng lần đầu tiên cài đặt trên máy sạch), thì 2 tệp đó sẽ được cài đặt trực tiếp và bình thường. (thử nghiệm trên nhiều máy tính Windows (XP, 7 và 8)

Bất kỳ ai bất cứ đề nghị gì là sai và làm thế nào để sửa chữa nó?

+0

Bạn đã thử chạy bản cài đặt với nhật ký chi tiết để xem tại sao chúng không được cài đặt? – ChrisPatrick

+0

Tệp nhật ký cài đặt có tại đây: http://pastebin.com/tsf9C1pS – Robbie

Trả lời

23

Tệp nhật ký được cung cấp cho thấy các phiên bản mới hơn của một vài tệp đã có trên máy:

MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {015A4DC1-56F4-562B-96B5-B3BE0D45FA5F} since the same component with higher versioned keyfile exists 
MSI (s) (0C:5C) [16:13:25:890]: Disallowing installation of component: {4B6A1404-3892-5BEF-AB47-8FE3149211A4} since the same component with higher versioned keyfile exists 

Tôi đã thấy vấn đề này với trình cập nhật này trong quá khứ. Christopher là chính xác. Cập nhật các tập tin của nó nhưng không nói với MSI (nó không cập nhật MSI mà không phải là điều đúng để làm). MSI mới nghĩ rằng các công cụ mới hơn là trên máy, chọn không cài đặt các tệp của nó, nhưng trong quá trình nâng cấp, gói cũ loại bỏ các tệp (nó không nhận thấy rằng các phiên bản mới hơn). Vì trình cài đặt mới đã chọn không cài đặt các tệp mà bạn kết thúc bằng không ... cho đến khi sửa chữa.

Để khắc phục sự cố, bạn cần phải di chuyển hành động RemoveExistingProducts của mình sau. Nếu bạn đang sử dụng phần tử MajorUpgrade thì Schedule='afterInstallExecute' hoặc Schedule='afterInstallFinalize' sẽ thực hiện thủ thuật. Bạn sẽ cần phải cẩn thận hơn với Component Rules.

Ngoài ra, IMHO, nhà cung cấp bên thứ ba không nên cập nhật tệp bên ngoài MSI. Quyết định của họ đang buộc sản phẩm của bạn thành một cách nâng cấp cụ thể.

+0

Xin chào Rob, cảm ơn vì phân tích ấn tượng này. Giải pháp của bạn hoạt động! Hơn nữa, bạn đã chỉ cho tôi đúng hướng của nguyên nhân gốc rễ của vấn đề. Trên một máy xây dựng, AutomaticUpdater.dll đã được tự động cập nhật lên phiên bản cao hơn trên máy phát triển của tôi mà tôi đã tạo bản dựng/cài đặt mới. Kết quả chính xác như bạn đã mô tả. Giải pháp của bạn hoạt động và sau khi nâng cấp máy phát triển lên cùng phiên bản của công cụ của bên thứ 3 như trên máy xây dựng, tôi cũng có thể giải quyết vấn đề. Đây là đôi khi tôi rất cẩn thận trong tương lai. – Robbie

+0

Tôi thấy loại vấn đề này rất nhiều tại Continental Airlines, nơi chúng tôi có ứng dụng trong sản xuất ban đầu được triển khai với các công cụ như SMS/Wise và nhóm ứng dụng đang thực hiện cập nhật tự động của riêng họ bên ngoài xe giao hàng chính thức. Tôi phải làm một "buộc gỡ bỏ cài đặt" để làm sạch đường cơ sở cho MSI để đi xuống và sau đó đánh bại các đội ứng dụng trên đầu để tự động cập nhật antipatterns của họ để cuối cùng đóng vòng lặp MSI. –

+0

Vô địch! Cảm ơn Rob, giờ đã lưu (ngày?) Đau lòng cho tôi không nghi ngờ gì. –

5

Một tệp nhật ký sẽ giúp đỡ. Tôi đoán là nó dựa vào nơi bạn đã lên kế hoạch Tôi đã nhìn thấy các tình huống trong đó Costing tìm ra một tệp đang được cài đặt giống như một tệp đã được cài đặt và quyết định không cài đặt tệp đó, sau đó nâng cấp chính xảy ra và bạn sẽ không có tệp đó. không có ở đó và chi phí nhận ra rằng nó cần phải được cài đặt

+0

Tệp nhật ký cài đặt có tại đây: http://pastebin.com/tsf9C1pS (hy vọng điều này sẽ giúp ích) – Robbie

+0

Có, điều đó sẽ hữu ích. Các dự đoán của tôi thường là tại chỗ. :) –

0

Mở phiên bản cũ của Windows Installer vấn đề được ghi nhận ở đây:

https://support.microsoft.com/en-us/kb/905238

Danh sách các sản phẩm bị ảnh hưởng inplies rằng nó cố định trong công cụ MSI 4.0 và sau này. Sử dụng 4.5 redistributable trước khi thực hiện cài đặt sẽ giúp, nếu áp dụng cho phiên bản hệ điều hành.

0

Lỗi vẫn tồn tại trên trình cài đặt 5.0 và vẫn là sự cố. Cách giải quyết để đặt RemoveExistingProduct sau InstallFinalize không có giải pháp cho chúng tôi. Tôi đã buộc bản cập nhật theo cài đặt thuộc tính trên một tệp.

Giải pháp này hoạt động cho chúng tôi ngay bây giờ.

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