# 1 `msilib` -- Microsoft インストーラーファイルの読み書き

Windowsプラットフォームで利用できます。

バージョン 2.5 で 新たに追加 された仕様です。

`msilib` モジュールは Microdoft インストーラー(`.msi`)の 作成を支援します。このファイルはしばしば埋め込まれた「キャビネット」ファイル (`.cab`) を含むので、CAB ファイル作成用の API も暴露します。現在の ところ `.cab` ファイルの読み出しはサポートしていませんが、`.msi` データベースの読み出しサポートは可能です。

このパッケージの目的は `.msi` ファイルにある全てのテーブルへの完全な アクセスの提供なので、提供されているものは正直に言って低レベルな API です。 このパッケージの二つの主要な応用は `distutils` の `bdist_msi` コマンドと、Python インストーラーパッケージそれ自体(と言いつつ現在は別バージョン の `msilib` を使っているのですが)です。

パッケージの内容は大きく四つのパートに分けられます。 低レベル CAB ルーチン、低レベル MSI ルーチン、少し高レベルの MSI ルーチン、 標準的なテーブル構造、の四つです。

`FCICreate`( | cabname, files)

  新しい CAB ファイルを cabname という名前で作ります。 files はタプルのリストで、それぞれのタプルがディスク上のファイル名と CAB ファイルで付けられるファイル名とからなるものでなければなりません。

  ファイルはリストに現れた順番で CAB ファイルに追加されます。全てのファイルは MSZIP 圧縮アルゴリズムを使って一つの CAB ファイルに追加されます。

  MSI 作成の様々なステップに対する Python コールバックは現在暴露されていません。

`UUIDCreate`( | )

  新しい一意識別子の文字列表現を返します。この関数は Windows API の関数 `UuidCreate` と `UuidToString` をラップしたものです。

`OpenDatabase`( | path, persist)

  MsiOpenDatabase を呼び出して新しいデータベースオブジェクトを返します。 path は MSI ファイルのファイル名です。 persist は五つの定数 `MSIDBOPEN_CREATEDIRECT`, `MSIDBOPEN_CREATE`, `MSIDBOPEN_DIRECT`, `MSIDBOPEN_READONLY`, `MSIDBOPEN_TRANSACT` のどれか一つで、 フラグ `MSIDBOPEN_PATCHFILE` を含めても構いません。 これらのフラグの意味は Microsoft のドキュメントを参照してください。 フラグに依って既存のデータベースを開いたり新しいのを作ったりします。

`CreateRecord`( | count)

  `MSICreateRecord` を呼び出して新しいレコードオブジェクトを返します。 count はレコードのフィールドの数です。

`init_database`( | name, schema, ProductName, ProductCode, ProductVersion, Manufacturer)

  name という名前の新しいデータベースを作り、 schema で初期化し、 プロパティ ProductName, ProductCode, ProductVersion, Manufacturer をセットして、 返します

  schema は `tables` と `_Validation_records` という属性を もったモジュールオブジェクトでなければなりません。典型的には、`msilib.schema` を使うべきです。

  データベースはこの関数から返された時点でスキーマとバリデーションレコードだけが 収められています。

`add_data`( | database, records)

  全ての records を database に追加します。 records はタプルのリストで、それぞれのタプルにはテーブルのスキーマに従った レコードの全てのフィールドを含んでいるものでなければなりません。オプションの フィールドには `None` を渡すことができます。

  フィールドの値には、整数・長整数・文字列・Binary クラスのインスタンスが使えます。

クラス `Binary`( | filename)

  Binary テーブル中のエントリーを表わします。 `add_data` を使ってこのクラスのオブジェクトを挿入する ときには filename という名前のファイルをテーブルに読み込みます。

`add_tables`( | database, module)

  module の全てのテーブルの内容を database に追加します。 module は tables という内容が追加されるべき全てのテーブルの リストと、テーブルごとに一つある実際の内容を持っている属性とを含んで いなければなりません。

  この関数は典型的にシーケンステーブルをインストールするのに使われます。

`add_stream`( | database, name, path)

  database の `_Stream` テーブルに、ファイル path を name というストリーム名で追加します。

`gen_uuid`( | )

  新しい UUID を、 MSI が通常要求する形式(すなわち、中括弧に入れ、16進数は 大文字)で返します。

参考:

FCICreateFile

UuidCreate

UuidToString