msilib — Microsoftインストーラーファイルの読み取りと書き込み—Pythonドキュメント
msilib —Microsoftインストーラーファイルの読み取りと書き込み
ソースコード: :source: `Lib / msilib / __ init __。py`
msilib は、Microsoftインストーラー(.msi
)ファイルの作成をサポートします。 これらのファイルには多くの場合、埋め込まれた「キャビネット」ファイル(.cab
)が含まれているため、CABファイルを作成するためのAPIも公開されます。 .cab
ファイルの読み取りのサポートは現在実装されていません。 .msi
データベースの読み取りサポートが可能です。
このパッケージは、.msi
ファイル内のすべてのテーブルへの完全なアクセスを提供することを目的としているため、かなり低レベルのAPIです。 このパッケージの2つの主要なアプリケーションは、 distutils コマンドbdist_msi
と、Pythonインストーラーパッケージ自体の作成です(ただし、現在、msilib
の異なるバージョンを使用しています)。
パッケージの内容は、大まかに4つの部分に分けることができます。低レベルのCABルーチン、低レベルのMSIルーチン、高レベルのMSIルーチン、および標準のテーブル構造です。
- msilib.FCICreate(cabname, files)
cabname という名前の新しいCABファイルを作成します。 files はタプルのリストである必要があり、各タプルにはディスク上のファイルの名前とCABファイル内のファイルの名前が含まれています。
ファイルは、リストに表示されている順序でCABファイルに追加されます。 すべてのファイルは、MSZIP圧縮アルゴリズムを使用して単一のCABファイルに追加されます。
MSI作成のさまざまなステップでのPythonへのコールバックは、現在公開されていません。
- msilib.UuidCreate()
- 新しい一意の識別子の文字列表現を返します。 これにより、WindowsAPI関数
UuidCreate()
およびUuidToString()
がラップされます。
- msilib.OpenDatabase(path, persist)
- MsiOpenDatabaseを呼び出して、新しいデータベースオブジェクトを返します。 path はMSIファイルのファイル名です。 persist は、定数
MSIDBOPEN_CREATEDIRECT
、MSIDBOPEN_CREATE
、MSIDBOPEN_DIRECT
、MSIDBOPEN_READONLY
、またはMSIDBOPEN_TRANSACT
のいずれかであり、フラグMSIDBOPEN_PATCHFILE
を含めることができます。 これらのフラグの意味については、Microsoftのドキュメントを参照してください。 フラグに応じて、既存のデータベースが開かれるか、新しいデータベースが作成されます。
- msilib.CreateRecord(count)
MSICreateRecord()
を呼び出して、新しいレコードオブジェクトを返します。 count は、レコードのフィールド数です。
- msilib.init_database(name, schema, ProductName, ProductCode, ProductVersion, Manufacturer)
新しいデータベース name を作成して返し、 schema で初期化し、プロパティ ProductName 、 ProductCode 、 ProductVersion [を設定します。 X169X]、およびメーカー。
schema は、
tables
および_Validation_records
属性を含むモジュールオブジェクトである必要があります。 通常、 msilib.schema を使用する必要があります。この関数が戻ると、データベースにはスキーマと検証レコードのみが含まれます。
- msilib.add_data(database, table, records)
すべてのレコードをデータベースのテーブルという名前のテーブルに追加します。
table 引数は、MSIスキーマで事前定義されたテーブルの1つである必要があります。
'Feature'
、'File'
、'Component'
、'Dialog'
、'Control'
など。records はタプルのリストである必要があり、各タプルにはテーブルのスキーマに従ったレコードのすべてのフィールドが含まれています。 オプションのフィールドには、
None
を渡すことができます。フィールド値は、int、文字列、またはBinaryクラスのインスタンスにすることができます。
- class msilib.Binary(filename)
- バイナリテーブルのエントリを表します。 add_data()を使用してこのようなオブジェクトを挿入すると、 filename という名前のファイルがテーブルに読み込まれます。
- msilib.add_tables(database, module)
モジュールからデータベースにすべてのテーブルコンテンツを追加します。 module には、コンテンツを追加する必要のあるすべてのテーブルを一覧表示する属性 Tables と、実際のコンテンツを持つテーブルごとに1つの属性が含まれている必要があります。
これは通常、シーケンステーブルをインストールするために使用されます。
- msilib.add_stream(database, name, path)
- ファイル path をデータベースの
_Stream
テーブルにストリーム名 name で追加します。
- msilib.gen_uuid()
- MSIが通常必要とする形式で新しいUUIDを返します(つまり、 中括弧で、すべて大文字で16進数)。
データベースオブジェクト
- Database.OpenView(sql)
MSIDatabaseOpenView()
を呼び出して、ビューオブジェクトを返します。 sql は、実行するSQLステートメントです。
- Database.Commit()
MSIDatabaseCommit()
を呼び出して、現在のトランザクションで保留中の変更をコミットします。
- Database.GetSummaryInformation(count)
MsiGetSummaryInformation()
を呼び出して、新しい要約情報オブジェクトを返します。 count は、更新される値の最大数です。
- Database.Close()
MsiCloseHandle()
を使用してデータベースオブジェクトを閉じます。バージョン3.7の新機能。
オブジェクトを表示
- View.Execute(params)
MSIViewExecute()
を使用して、ビューのSQLクエリを実行します。 params がNone
でない場合は、クエリ内のパラメータトークンの実際の値を説明するレコードです。
- View.GetColumnInfo(kind)
MsiViewGetColumnInfo()
を呼び出して、ビューの列を説明するレコードを返します。 種類は、MSICOLINFO_NAMES
またはMSICOLINFO_TYPES
のいずれかです。
- View.Fetch()
MsiViewFetch()
を呼び出して、クエリの結果レコードを返します。
- View.Modify(kind, data)
MsiViewModify()
を呼び出して、ビューを変更します。 種類は、MSIMODIFY_SEEK
、MSIMODIFY_REFRESH
、MSIMODIFY_INSERT
、MSIMODIFY_UPDATE
、MSIMODIFY_ASSIGN
、 [のいずれかになります。 X87X]、MSIMODIFY_MERGE
、MSIMODIFY_DELETE
、MSIMODIFY_INSERT_TEMPORARY
、MSIMODIFY_VALIDATE
、MSIMODIFY_VALIDATE_NEW
、MSIMODIFY_VALIDATE_FIELD
、または [ X176X]。data は、新しいデータを説明するレコードである必要があります。
- View.Close()
MsiViewClose()
を使用してビューを閉じます。
要約情報オブジェクト
- SummaryInformation.GetProperty(field)
MsiSummaryInfoGetProperty()
を介して、サマリーのプロパティを返します。 field はプロパティの名前であり、定数PID_CODEPAGE
、PID_TITLE
、PID_SUBJECT
、PID_AUTHOR
、[ X120X] 、PID_COMMENTS
、PID_TEMPLATE
、PID_LASTAUTHOR
、PID_REVNUMBER
、PID_LASTPRINTED
、PID_CREATE_DTM
、[X203X ] 、PID_PAGECOUNT
、PID_WORDCOUNT
、PID_CHARCOUNT
、PID_APPNAME
、またはPID_SECURITY
。
- SummaryInformation.GetPropertyCount()
MsiSummaryInfoGetPropertyCount()
を介して、サマリープロパティの数を返します。
- SummaryInformation.SetProperty(field, value)
MsiSummaryInfoSetProperty()
でプロパティを設定します。 field は、 GetProperty()と同じ値を持つことができ、 value はプロパティの新しい値です。 可能な値のタイプは整数と文字列です。
- SummaryInformation.Persist()
MsiSummaryInfoPersist()
を使用して、変更されたプロパティを要約情報ストリームに書き込みます。
レコードオブジェクト
- Record.GetFieldCount()
MsiRecordGetFieldCount()
を介して、レコードのフィールド数を返します。
- Record.GetInteger(field)
- 可能な場合は、 field の値を整数として返します。 フィールドは整数である必要があります。
- Record.GetString(field)
- 可能な場合は、 field の値を文字列として返します。 フィールドは整数である必要があります。
- Record.SetString(field, value)
- フィールドを値から
MsiRecordSetString()
に設定します。 フィールドは整数である必要があります。 値文字列。
- Record.SetStream(field, value)
- field を、
MsiRecordSetStream()
を介して、 value という名前のファイルの内容に設定します。 フィールドは整数である必要があります。 値文字列。
- Record.SetInteger(field, value)
- フィールドを値から
MsiRecordSetInteger()
に設定します。 フィールドと値はどちらも整数である必要があります。
- Record.ClearData()
MsiRecordClearData()
を使用して、レコードのすべてのフィールドを0に設定します。
エラー
MSI関数のすべてのラッパーはMSIError
を発生させます。 例外内の文字列には、より詳細な情報が含まれます。
CABオブジェクト
- class msilib.CAB(name)
クラス CAB はCABファイルを表します。 MSIの構築中に、ファイルは
Files
テーブルとCABファイルに同時に追加されます。 次に、すべてのファイルが追加されたら、CABファイルを書き込んでから、MSIファイルに追加できます。name は、MSIファイル内のCABファイルの名前です。
- append(full, file, logical)
パス名 full のファイルを logical という名前でCABファイルに追加します。 logical という名前のファイルがすでに存在する場合は、新しいファイル名が作成されます。
CABファイル内のファイルのインデックスと、CABファイル内のファイルの新しい名前を返します。
- commit(database)
CABファイルを生成し、それをストリームとしてMSIファイルに追加し、
Media
テーブルに配置して、生成されたファイルをディスクから削除します。
ディレクトリオブジェクト
- class msilib.Directory(database, cab, basedir, physical, logical, default[, componentflags])
Directoryテーブルに新しいディレクトリを作成します。 ディレクトリの各時点で現在のコンポーネントがあります。これは、 start_component()を介して明示的に作成されるか、ファイルが初めて追加されたときに暗黙的に作成されます。 ファイルは現在のコンポーネントとcabファイルに追加されます。 ディレクトリを作成するには、ベースディレクトリオブジェクト(
None
の場合があります)、物理ディレクトリへのパス、および論理ディレクトリ名を指定する必要があります。 default は、ディレクトリテーブルのDefaultDirスロットを指定します。 componentflags は、新しいコンポーネントが取得するデフォルトのフラグを指定します。- start_component(component=None, feature=None, flags=None, keyfile=None, uuid=None)
コンポーネントテーブルにエントリを追加し、このコンポーネントをこのディレクトリの現在のコンポーネントにします。 コンポーネント名が指定されていない場合は、ディレクトリ名が使用されます。 機能が指定されていない場合、現在の機能が使用されます。 フラグが指定されていない場合、ディレクトリのデフォルトフラグが使用されます。 keyfile が指定されていない場合、KeyPathはComponentテーブルでnullのままになります。
- add_file(file, src=None, version=None, language=None)
ディレクトリの現在のコンポーネントにファイルを追加し、現在のコンポーネントがない場合は新しいコンポーネントを開始します。 デフォルトでは、ソースとファイルテーブルのファイル名は同じになります。 src ファイルが指定されている場合、現在のディレクトリを基準にして解釈されます。 オプションで、バージョンおよび言語をファイルテーブルのエントリに指定できます。
- glob(pattern, exclude=None)
globパターンで指定されているように、ファイルのリストを現在のコンポーネントに追加します。 個々のファイルは exclude リストから除外できます。
- remove_pyc()
アンインストール時に
.pyc
ファイルを削除します。
特徴
- class msilib.Feature(db, id, title, desc, display, level=1, parent=None, directory=None, attributes=0)
- 値 id 、 parent.id 、 title 、 desc を使用して、
Feature
テーブルに新しいレコードを追加します。 、ディスプレイ、レベル、ディレクトリ、および属性。 結果のフィーチャオブジェクトは、 Directory のstart_component()
メソッドに渡すことができます。
- set_current()
- この機能を msilib の現在の機能にします。 機能が明示的に指定されていない限り、新しいコンポーネントはデフォルトの機能に自動的に追加されます。
GUIクラス
msilib は、MSIデータベースのGUIテーブルをラップするいくつかのクラスを提供します。 ただし、標準のユーザーインターフェイスは提供されていません。 bdist_msi を使用して、Pythonパッケージをインストールするためのユーザーインターフェイスを備えたMSIファイルを作成します。
- class msilib.Control(dlg, name)
ダイアログコントロールの基本クラス。 dlg はコントロールが属するダイアログオブジェクトであり、 name はコントロールの名前です。
- event(event, argument, condition=1, ordering=None)
このコントロールの
ControlEvent
テーブルにエントリを作成します。
- mapping(event, attribute)
このコントロールの
EventMapping
テーブルにエントリを作成します。
- condition(action, condition)
このコントロールの
ControlCondition
テーブルにエントリを作成します。
- class msilib.RadioButtonGroup(dlg, name, property)
- name という名前のラジオボタンコントロールを作成します。 property は、ラジオボタンが選択されたときに設定されるインストーラープロパティです。
- add(name, x, y, width, height, text, value=None)
- name という名前のラジオボタンを、座標 x 、 y 、 width 、 height でグループに追加します。 、およびラベル text 。 value が
None
の場合、デフォルトで name になります。
- class msilib.Dialog(db, name, x, y, w, h, attr, title, first, default, cancel)
新しい Dialog オブジェクトを返します。
Dialog
テーブルに、指定された座標、ダイアログ属性、タイトル、最初の名前、デフォルト、およびキャンセルコントロールを使用してエントリが作成されます。- control(name, type, x, y, width, height, attributes, property, text, control_next, help)
新しい Control オブジェクトを返します。
Control
テーブルのエントリは、指定されたパラメータで作成されます。これは一般的な方法です。 特定のタイプについては、特殊な方法が提供されています。
- text(name, x, y, width, height, attributes, text)
Text
コントロールを追加して返します。
- bitmap(name, x, y, width, height, text)
Bitmap
コントロールを追加して返します。
- line(name, x, y, width, height)
Line
コントロールを追加して返します。
- pushbutton(name, x, y, width, height, attributes, text, next_control)
PushButton
コントロールを追加して返します。
- radiogroup(name, x, y, width, height, attributes, property, text, next_control)
RadioButtonGroup
コントロールを追加して返します。
- checkbox(name, x, y, width, height, attributes, property, text, next_control)
CheckBox
コントロールを追加して返します。
事前計算されたテーブル
msilib は、スキーマとテーブルの定義のみを含むいくつかのサブパッケージを提供します。 現在、これらの定義はMSIバージョン2.0に基づいています。
- msilib.schema
- これはMSI2.0の標準MSIスキーマであり、 Tables 変数はテーブル定義のリストを提供し、 _Validation_records はMSI検証用のデータを提供します。
- msilib.sequence
- このモジュールには、標準シーケンステーブルのテーブルコンテンツが含まれています: AdminExecuteSequence 、 AdminUISequence 、 AdvtExecuteSequence 、 InstallExecuteSequence 、および InstallUISequence [X215X ]。
- msilib.text
- このモジュールには、標準のインストーラーアクション用のUITextテーブルとActionTextテーブルの定義が含まれています。