LoginSignup
2
1

More than 5 years have passed since last update.

MSI内のプロパティ値を外部のスクリプトで取得する

Last updated at Posted at 2015-11-08

Windows InstallerはCOMのインターフェースを持っていて、WSHでMSIファイル内のテーブルを読み込むことができます。JScriptで製品バージョンを取得してみます。

var databasePath = "TestProduct.msi";
var query = "SELECT `Value` FROM `Property` WHERE Property.Property='ProductVersion'";
var msiOpenDatabaseModeReadOnly = 0;
//
var installer = WScript.CreateObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(databasePath, msiOpenDatabaseModeReadOnly);
var view = database.OpenView(query);
view.Execute();
var record = view.Fetch();
WScript.echo(record.StringData(1));

また、Inno SetupでもCOMを扱えるので、外部に置いたMSIファイルのバージョンを取得することができます。これはInno SetupをMSIのセットアップランチャーとして使う時に役に立つでしょう。
まず、変数を宣言し、

var
  installer, database, view, rec: Variant;

下記のコードでバージョンを取得します。

  installer := CreateOleObject('WindowsInstaller.Installer');
  database := installer.OpenDatabase('TestProduct.msi', 0);
  view := database.OpenView('SELECT `Value` FROM `Property` WHERE Property.Property=''ProductVersion''');
  view.Execute();
  rec := view.Fetch();
  MsgBox(rec.StringData(1), mbInformation, MB_OK);

OpenView()関数に与えるSQL文を変えれば、あらゆるテーブルの値を取得することができます。業務用途のために信頼性を上げるなら、例外処理を追加した方が良いです。

この関数で使えるSQL文の文法は、MSDNライブラリの「SQL Syntax」を、使用例は「Examples of Database Queries Using SQL and Script」を参照してください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1