7

Tôi có trình cài đặt MSI mà tôi cần thêm hoặc sửa đổi thuộc tính văn bản ngắn từ dòng lệnh.Làm cách nào để thêm/cập nhật thuộc tính bên trong MSI từ dòng lệnh?

Việc này phải được thực hiện sau khi trình cài đặt được tạo; Tôi không thể sửa đổi quy trình tạo trình cài đặt ở vị trí đầu tiên. Nó cũng phải được thực hiện không đầu từ một kịch bản.

Khi tôi nói "thuộc tính", nó có thể là thuộc tính MSI, giá trị được ghi vào sổ đăng ký tại thời điểm cài đặt hoặc bất kỳ cơ chế nào khác có thể đưa văn bản tùy chỉnh ngắn này vào ứng dụng đã cài đặt khi ứng dụng chạy.

Trả lời

12

Ví dụ VBScript mà bạn có thể sử dụng để cập nhật (hoặc thêm) một hậu bất động sản xây dựng ...

Option Explicit 

Const MSI_FILE = "myfile.msi" 


Dim installer, database, view 

Set installer = CreateObject("WindowsInstaller.Installer") 
Set database = installer.OpenDatabase (MSI_FILE, 1) 

' Update 
Set view = database.OpenView ("UPDATE Property SET Value = '" & myproperty & "' WHERE Property = 'MYPROPERTY'") 

' .. or Add (Insert) 
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('MYPROPERTY', '" & myproperty & "')") 
view.Execute 


Set database = Nothing 
Set installer = Nothing 
Set view = Nothing 

để biết thêm thông tin xem phần Windows Installer SDK (một phần của Windows SDK), có một loạt các ví dụ kịch bản mà bạn có thể sử dụng từ dòng lệnh để làm nhiệm vụ thao tác khác nhau MSI, ví dụ WiRunSQL.vbs cho phép bạn thực thi SQL tùy ý đối với MSI.

+2

Đừng quên cập nhật mã gói trong Luồng thông tin tóm tắt khi bạn thay đổi gói. Trong khi thay đổi giá trị thuộc tính không có khả năng gây ra vấn đề thực sự ngay cả khi bạn phát hành nhiều tệp .msi với các giá trị khác nhau, thì đó vẫn là điều bạn cần làm. –

+0

Tôi chỉ thấy rằng tôi cần cập nhật Thông tin Tóm tắt khi tạo các biến đổi, bất kỳ lý do nào bạn cần cập nhật cho tất cả các thay đổi? – saschabeaumont

+0

http://msdn.microsoft.com/en-us/library/aa370568(VS.85).aspx –

5
c:\> msiexec /i yourmsi.msi THEPROPERTYNAME=valueofproperty 

Để biết thêm thông tin, hãy nhập msiexec tại dòng lệnh.

EDIT: hoặc thay đổi các tập tin .msi bản thân bằng cách sử dụng câu lệnh SQL và cập nhật các tài sản trong các thuộc tính bảng: http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa368568(VS.85).aspx

+0

Tôi nghĩ rằng CÀI ĐẶT bằng thuộc tính mới. Tôi không muốn cài đặt, tôi cần phải sửa đổi tập tin MSI. –

+0

Tôi không nghĩ rằng điều này xứng đáng với các downvote, vì điều này phù hợp với các tiêu chí được xác định bởi câu hỏi của OP. Post-build, là một thuộc tính MSI, và chắc chắn là "bất kỳ cơ chế nào khác có thể nhận được văn bản tùy chỉnh ngắn này vào ứng dụng đã cài đặt khi nó chạy." Nó không thay đổi bản thân MSI, nhưng làm điều này trong thời gian chạy của trình cài đặt có hiệu quả tương tự. – SpellingD

+0

@ZippyV Cảm ơn bạn đã chia sẻ liên kết! – Rama

0

Điều này là để thêm vào câu trả lời của @saschabeaumont trong '09. Hiện đang sử dụng dotNet 4.0

Option Explicit 

Const MSI_FILE = "myFilePath.msi" 
Const PROPERTY_STRING_Value = "FooBar" 

Dim installer, database, view 

Set installer = CreateObject("WindowsInstaller.Installer") 
Set database = installer.OpenDatabase (MSI_FILE, 1) 

' Update 
Set view = database.OpenView ("UPDATE Property SET Value = '" & PROPERTY_STRING_Value & "' WHERE Property = 'MYPROPERTY'") 

' .. or Add (Insert) 
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('MYPROPERTY', '" & PROPERTY_STRING_Value & "')") 

view.Execute() 
database.Commit() 

Set database = Nothing 
Set installer = Nothing 
Set view = Nothing 
+0

Đây không phải là mã dotnet. – Crono

+0

bằng cách nào đó mới nhất được đăng bởi @asarenski đã làm việc nhưng trước đó bởi saschabeaumont không thay đổi trong msi. +1 – Prasoon

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