コマンドラインからMSI内のプロパティを追加/更新するにはどうすればよいですか?
-
05-07-2019 - |
質問
コマンドラインから短いテキストプロパティを追加または変更する必要がある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
所属していません StackOverflow