コマンドラインからMSI内のプロパティを追加/更新するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1609250

質問

コマンドラインから短いテキストプロパティを追加または変更する必要があるMSIインストーラーがあります。

これは、インストーラーのビルド後に行う必要があります。そもそもインストーラーを作成するプロセスを変更することはできません。また、スクリプトからヘッドレスで実行する必要があります。

「プロパティ」と言うと、 MSIプロパティ、インストール時にレジストリに書き込まれる値、または実行時にインストールされたアプリケーションにこの短いカスタムテキストを取得できるその他のメカニズムが考えられます。

役に立ちましたか?

解決

ビルド後のプロパティの更新(または追加)に使用できるVBScriptの例...

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

詳細については、Windows Installer SDK( Windows SDK )、コマンドラインからさまざまなMSI操作タスクを実行するために使用できるサンプルスクリプトがたくさんあります。たとえば、 WiRunSQL.vbs を使用すると、 MSIに対して任意のSQLを実行します。

他のヒント

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

詳細については、コマンドラインでmsiexecと入力してください。

EDIT:または、SQLステートメントを使用して.msiファイル自体を変更し、プロパティテーブルのプロパティを更新します。 http://msdn.microsoft.com/en-us/ library / aa372021(VS.85).aspx http://msdn.microsoft.com/en-us/ library / aa368568(VS.85).aspx

これは、2009年の@saschabeaumontの回答に追加するものです。現在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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top