2009-12-22 13 views
6

Tôi đang sử dụng VisualStudio2005 và vdproj để tạo một tệp MSI đơn giản. Tôi cần phải chuyển vào thuộc tính REINSTALLMODE khi tôi khởi chạy nó.Chuyển REINSTALLMODE sang tệp MSI

Tôi biết điều này có thể được thực hiện thông qua dòng lệnh, như vậy: msiexec.exe /i foo.msi REINSTALLMODE=amus

Tuy nhiên, nếu người dùng chọn nhấp vào msi trực tiếp (tung ra trình hướng dẫn), bất động sản không được thông qua. Có thể làm điều này thông qua VS và vdproj?

Một số tùy chọn Tôi đã điều tra:

  • Khi tôi xây dựng MSI qua VS, nó cũng tạo ra một setup.exe. Có cách nào để vượt qua tài sản REINSTALLMODE thông qua điều này có thể?
  • Tôi đã cài đặt Orca, cho phép tôi xem/chỉnh sửa bảng Thuộc tính của MSI. Tôi có thể thêm nó theo cách này, nhưng sau đó tôi sẽ phải thêm nó mỗi khi tôi làm một MSI xây dựng.

Cảm ơn lời khuyên nào.

Trả lời

4

Đáng buồn thay, tôi không thể tìm thấy cách để đặt các thuộc tính MSI khác ngay trong VStudio.

Tuy nhiên, một phương pháp mà nên làm việc là thế này:

  1. Sử dụng Orca để tạo ra một transform (MST) mà chỉ thay đổi REINSTALLMODE tài sản. (Tóm lại, bạn chỉnh sửa thuộc tính & lưu dưới dạng biến đổi mới, sau đó sử dụng lệnh "Tạo Biến đổi" để tạo MST.)
  2. Biến đổi này có thể được áp dụng trực tiếp cho MSI của bạn bằng cách sử dụng lệnh MSITRAN.EXE Windows Installer SDK nơi bạn tìm thấy Orca). Bạn có thể: (a) tìm cách để Visual Studio luôn chạy lệnh MSITRAN ngay sau khi xây dựng MSI trước khi thử nghiệm.
+0

Tôi thích phong cách của bạn, cảm ơn phản hồi chi tiết. Hãy để tôi cung cấp cho một thử này ... – Ken

+1

(Tôi có lẽ nên cố gắng sử dụng WiX nếu msi này được phức tạp hơn) – Ken

+0

Thật vậy, WiX cung cấp cho bạn truy cập vào tất cả các phức tạp của Windows Installer. Nhưng đó là một chút của một đường cong học tập. Chúc may mắn! – ewall

7

Tôi đã tìm thấy cách tự động hơn để thực hiện việc này.

Tạo một kịch bản có tên add_reinstall_prop.vbs (ví dụ) với folowing:

set objArgs = WScript.Arguments 
set o_installer = CreateObject("WindowsInstaller.Installer") 
set o_database = o_Installer.OpenDatabase(objArgs(0), 1) 
s_SQL = "INSERT INTO Property (Property, Value) Values('REINSTALLMODE', 'amus')" 
set o_MSIView = o_DataBase.OpenView(s_SQL) 
o_MSIView.Execute 
o_DataBase.Commit 

Thêm một sự kiện sau xây dựng cho dự án thiết lập của bạn gọi kịch bản như sau:

add_reinstall_prop.vbs $(BuiltOuputPath) 

Thao tác này sẽ tự động thêm mục nhập mong muốn vào MSI được xây dựng. Sau đó, bạn có thể kiểm tra bằng Orca để xem mục nhập hiện được thêm tự động sau khi tạo.

+0

Cảm ơn người đàn ông nó hoạt động như sự quyến rũ. Tôi cần phải sử dụng dấu ngoặc kép cho add_reinstall_prop.vbs "$ (BuiltOuputPath)" –