msilib — Microsoftインストーラーファイルの読み取りと書き込み—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/msilib
移動先:案内検索

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_CREATEDIRECTMSIDBOPEN_CREATEMSIDBOPEN_DIRECTMSIDBOPEN_READONLY、またはMSIDBOPEN_TRANSACTのいずれかであり、フラグMSIDBOPEN_PATCHFILEを含めることができます。 これらのフラグの意味については、Microsoftのドキュメントを参照してください。 フラグに応じて、既存のデータベースが開かれるか、新しいデータベースが作成されます。
msilib.CreateRecord(count)
MSICreateRecord()を呼び出して、新しいレコードオブジェクトを返します。 count は、レコードのフィールド数です。
msilib.init_database(name, schema, ProductName, ProductCode, ProductVersion, Manufacturer)

新しいデータベース name を作成して返し、 schema で初期化し、プロパティ ProductNameProductCode 、 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進数)。

も参照してください

FCICreate UuidCreate UuidToString


データベースオブジェクト

Database.OpenView(sql)
MSIDatabaseOpenView()を呼び出して、ビューオブジェクトを返します。 sql は、実行するSQLステートメントです。
Database.Commit()
MSIDatabaseCommit()を呼び出して、現在のトランザクションで保留中の変更をコミットします。
Database.GetSummaryInformation(count)
MsiGetSummaryInformation()を呼び出して、新しい要約情報オブジェクトを返します。 count は、更新される値の最大数です。
Database.Close()

MsiCloseHandle()を使用してデータベースオブジェクトを閉じます。

バージョン3.7の新機能。

オブジェクトを表示

View.Execute(params)
MSIViewExecute()を使用して、ビューのSQLクエリを実行します。 paramsNoneでない場合は、クエリ内のパラメータトークンの実際の値を説明するレコードです。
View.GetColumnInfo(kind)
MsiViewGetColumnInfo()を呼び出して、ビューの列を説明するレコードを返します。 種類は、MSICOLINFO_NAMESまたはMSICOLINFO_TYPESのいずれかです。
View.Fetch()
MsiViewFetch()を呼び出して、クエリの結果レコードを返します。
View.Modify(kind, data)

MsiViewModify()を呼び出して、ビューを変更します。 種類は、MSIMODIFY_SEEKMSIMODIFY_REFRESHMSIMODIFY_INSERTMSIMODIFY_UPDATEMSIMODIFY_ASSIGN、 [のいずれかになります。 X87X]、MSIMODIFY_MERGEMSIMODIFY_DELETEMSIMODIFY_INSERT_TEMPORARYMSIMODIFY_VALIDATEMSIMODIFY_VALIDATE_NEWMSIMODIFY_VALIDATE_FIELD、または [ X176X]。

data は、新しいデータを説明するレコードである必要があります。

View.Close()
MsiViewClose()を使用してビューを閉じます。

要約情報オブジェクト

SummaryInformation.GetProperty(field)
MsiSummaryInfoGetProperty()を介して、サマリーのプロパティを返します。 field はプロパティの名前であり、定数PID_CODEPAGEPID_TITLEPID_SUBJECTPID_AUTHOR、[ X120X] 、PID_COMMENTSPID_TEMPLATEPID_LASTAUTHORPID_REVNUMBERPID_LASTPRINTEDPID_CREATE_DTM、[X203X ] 、PID_PAGECOUNTPID_WORDCOUNTPID_CHARCOUNTPID_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)
idparent.idtitledesc を使用して、Featureテーブルに新しいレコードを追加します。 、ディスプレイレベルディレクトリ、および属性。 結果のフィーチャオブジェクトは、 Directorystart_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 という名前のラジオボタンを、座標 xywidthheight でグループに追加します。 、およびラベル textvalueNoneの場合、デフォルトで 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
このモジュールには、標準シーケンステーブルのテーブルコンテンツが含まれています: AdminExecuteSequenceAdminUISequenceAdvtExecuteSequenceInstallExecuteSequence 、および InstallUISequence [X215X ]。
msilib.text
このモジュールには、標準のインストーラーアクション用のUITextテーブルとActionTextテーブルの定義が含まれています。