2010-11-17 52 views
15

Tôi có một Visual Studio 2010 Dự án triển khai với các cài đặt sau:Visual Studio 2010 - RemovePreviousVersions

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

Dự án Tôi đang xây dựng có một số DLL mà do cách di sản mà serialization được thực hiện các phiên bản tập tin cho dự án này không thể được tăng lên (mà chúng tôi đang trong quá trình thay đổi).

Làm thế nào tôi có thể nhận dự án thiết lập để xóa hoàn toàn các tệp hiện có (hoặc ít nhất ghi đè bằng tất cả các tệp mới)?

Có lẽ tôi cần phải kịch bản một gỡ bỏ cài đặt trong trình cài đặt (ai đó có thể liên kết với tôi để làm điều này, tôi không thể tìm thấy)

Tôi đã nhìn xung quanh và cho bất kỳ câu hỏi hiện có và tất cả họ đều nói "tăng tập tin của bạn phiên bản ", tuy nhiên đối với tôi đây không phải là một lựa chọn.

Trả lời

20

Dự án thiết lập được tạo bằng Visual Studio (2008 và 2010) sẽ chỉ thay thế tệp nếu số phiên bản đã được tăng lên. Giải pháp hiển nhiên sẽ là tăng tất cả các số phiên bản; nhưng khi bạn nói điều này là không khả thi cho bạn.

Hành vi của tệp .msi về cơ bản được xác định bởi thời điểm hành động RemoveExistingProducts được thực thi. Người cài đặt được tạo với VS 2008 lập lịch hành động này sau sản phẩm mới đã được cài đặt. Các hội đồng đã được sửa đổi có phiên bản chưa được tăng lên do đó không được thay thế. Một số chi tiết về hành vi update được mô tả trong luồng này:

RemovePreviousVersions=True but previous version is not removed from the target machine

Để thay đổi hành vi, bạn có thể vá các tập tin .msi tạo để các hành động được thực hiện RemoveExistingProductstrước sự sản phẩm mới được cài đặt (điều này thực sự là hành vi nếu bạn tạo thiết lập với Visual Studio 2005). Bản vá có thể, ví dụ: được thực hiện bằng cách sử dụng VBScript nhỏ mà chạy như một bước sau xây dựng:

Dim objInstaller 
Dim objDatabase 
Dim objView 
Dim objResult 

Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then 
    WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>" 
    WScript.Quit -1 
End If 

strPathMsi = WScript.Arguments(0) 

Set objInstaller = CreateObject("WindowsInstaller.Installer") 
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1) 
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'") 

WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'" 
objView.Execute 
objDatabase.Commit 

WScript.Quit 0 
+3

Đó là lời cảm ơn tuyệt vời. Đối với những người khác tham khảo PostBuildEvent của tôi là (lưu các vbs vào thư mục dự án thiết lập): cscript $ (ProjectDir) fixRemovePreviousVersions.vbs $ (BuiltOuputPath) – Seph

+0

@Seph làm cách nào bạn thêm một PostBuildEvent cho một dự án MSI? – wal

+0

Ok Tôi đã tìm thấy nó, ẩn đi trong cửa sổ Thuộc tính của dự án. :) – wal

1

Đã cùng vấn đề với vài thiết lập di cư dạng 2005 t0 2010. Chỉnh sửa thiết lập (.msi) nộp với ORCA và thay đổi Execute Chuỗi . RemoveExistingProducts trước khi InstallInitialize Điều này đã giải quyết được sự cố cài đặt.

0

Cách đơn giản nhất để thực hiện một gỡ bỏ cài đặt hoàn tất trước khi cài đặt mới là

  1. đi đến "dự án khởi động" của bạn, nhấp chuột phải và chọn "tùy chọn".
  2. Nhấp vào nút "thông tin lắp ráp". Sau đó tăng "phiên bản lắp ráp" và giá trị "phiên bản tệp", nhấp "ok".
  3. Sau đó chuyển đến dự án thiết lập của bạn. Đảm bảo rằng "DetectNewInstalledVersion" được đặt thành true, "RemovePreviousVersion" là đúng, sau đó tăng "phiên bản", ví dụ từ 1.0.0 đến 1.0.1 và sau đó hộp thoại sẽ xuất hiện yêu cầu bạn cập nhật "ProductCode" của mình, chỉ cần chọn " Vâng". Hãy chắc chắn rằng bạn "xây dựng lại" dự án khởi động của bạn và sau đó xây dựng lại dự án thiết lập của bạn.

Điều này sẽ thực hiện thủ thuật. Thưởng thức.Sau đó, nhấp chuột phải vào thư mục cài đặt của bạn và chọn "mở thư mục trong cửa sổ thám hiểm" và tìm trong thư mục "phát hành".

+0

Không thể tăng phiên bản như đã đề cập trong OP: 'do cách di sản mà tuần tự hóa đã được triển khai các phiên bản tệp cho dự án này không thể được tăng lên' – Seph