2012-07-04 44 views
5

Tôi có một sản phẩm được đóng gói như một MSI. Khi khách hàng của tôi cài đặt phiên bản mới của sản phẩm của tôi trên đầu phiên bản hiện tại, nó không hoạt động độc đáo vì hành động VBS tùy chỉnh, như được giải thích bên dưới. Câu hỏi của tôi là: làm thế nào tôi có thể thay đổi MSI của tôi để cài đặt trên đầu sẽ luôn luôn làm một gỡ bỏ cài đặt đầy đủ của bất kỳ phiên bản hiện tại trước?Làm cách nào để gỡ cài đặt phiên bản trước đó như một phần của cài đặt msi?

Chi tiết là:

Tôi có một sản phẩm với nhiều phiên bản được triển khai tại nhiều công ty khác nhau. Mỗi năm một lần, mỗi khách hàng của tôi sẽ nhận được một phiên bản sản phẩm mới của tôi và triển khai đến các máy trạm của công ty họ. Những người chịu trách nhiệm triển khai sẽ thích họ có thể cài đặt phiên bản mới trên đầu phiên bản cũ, thay vì phải bao gồm một bước gỡ cài đặt trong gói cài đặt của họ.

Cài đặt msi tạo và ghi một số tệp vào thư mục [CommonApplicationData] \ MyApp. Trong quá trình thực hiện, ứng dụng tạo thêm các tệp trong thư mục [CommonApplicationData] \ MyApp. Trong khi gỡ cài đặt, tôi cần xóa tất cả các tệp này. Vì chúng không được cài đặt bởi msi nên chúng không được tự động gỡ cài đặt, vì vậy tôi đã tạo một tập lệnh vbs để xóa thư mục đó và bất kỳ thư mục nào khác trong đó. Tôi đặt một lệnh để thực hiện điều đó vbs trong ExecuteDeferred:

... 
RemoveFiles 
RemoveFolders 
CreateFolders 
MoveFiles 
InstallFiles 
PatchFiles 
If REMOVE="ALL" Then 
    REM line below is my custom script 
    call VBScript From Installation (MyApp_UninstallCleanup) 
End 
DuplicateFiles 
BindImage 
CreateShortcuts 
... 

Cho đến nay rất tốt và nó hoạt động tốt khi cài đặt & gỡ bỏ cài đặt. Tuy nhiên, nếu tôi cài đặt phiên bản mới của sản phẩm trên đầu phiên bản hiện tại, mọi thứ sẽ xảy ra theo thứ tự sau: a) cài đặt phiên bản mới, tạo nhiều tệp khác nhau trong thư mục [CommonApplicationData] \ MyApp và trong [Program Files] \ MyApp ..., ghi đè tệp của phiên bản cũ b) chạy vbs của tôi, xóa thư mục [CommonApplicationData] \ MyApp

Tôi có GUID cho các phiên bản cũ được liệt kê trong bảng Nâng cấp trong MSI mới của tôi và ngoài kịch bản tùy chỉnh này, quá trình nâng cấp dường như hoạt động tốt.

Bản thân sản phẩm khá nhỏ nên sẽ ổn nếu trình cài đặt luôn xóa hoàn toàn các phiên bản trước đó trước khi cài đặt phiên bản mới. Không có cài đặt người dùng nào trên máy trạm cần được giữ lại và kích thước tệp không lớn. Do đó để đơn giản, tôi muốn các phiên bản trước được gỡ cài đặt thay vì được cập nhật chỉ với các bit đã thay đổi.

Có cách nào tôi có thể thay đổi MSI mới của mình để có thể gỡ cài đặt các phiên bản trước không?

Đáng chú ý, tôi có nhiều công ty có phiên bản hiện tại của MSI được cài đặt có chứa các vbs tùy chỉnh. Vì vậy, giải pháp thực sự cần phải là một giải pháp có thể đối phó với các msi đã được cài đặt hiện có.

Tôi đã sử dụng Wise Installation Express 7.0 để tạo MSI.

thanks !!

(cross-posted here)

Trả lời

5

Schedule RemoveExistingProducts hành động trước InstallInitialize hành động:

Trong trường hợp này, trình cài đặt loại bỏ các ứng dụng cũ hoàn toàn trước khi cài đặt ứng dụng mới. Đây là một vị trí không hiệu quả cho hành động vì tất cả các tệp được sử dụng lại phải được recopied.

1

trả lời from EdT trên các diễn đàn Symantec

Nếu bạn đã sử dụng mẫu khôn ngoan chuẩn cho cài đặt của bạn, sau đó hành động RemoveExistingProducts được giải mã ở phần cuối của chuỗi InstallExecute. Mặc dù về mặt kỹ thuật, đây là vị trí "hiệu quả nhất", trừ khi bạn đã chạy UpgradeSync rất cẩn thận khi tạo gói mới để nâng cấp cũ, kết quả cuối cùng thường là một trong các tệp bị thiếu hoặc các sai khác.

Khắc phục là yêu cầu lại hành động RemoveExistingProducts để nó chạy giữa InstallValidate và InstallInitialize. Điều đó đảm bảo rằng ứng dụng cũ bị xóa hoàn toàn trước khi phiên bản mới được cài đặt.

Tra cứu "RemoveExistingProducts" trong tệp trợ giúp MSI.CHM để có giải thích chi tiết hơn về các tùy chọn để định vị hành động này.

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