\section{\module{msilib} ---
         Read and write Microsoft Installer files}

\declaremodule{standard}{msilib}
  \platform{Windows}
\modulesynopsis{Creation of Microsoft Installer files, and CAB files.}
\moduleauthor{Martin v. L\"owis}{martin@v.loewis.de}
\sectionauthor{Martin v. L\"owis}{martin@v.loewis.de}

\index{msi}

\versionadded{2.5}

The \module{msilib} supports the creation of Microsoft Installer
(\code{.msi}) files.  Because these files often contain an embedded
``cabinet'' file (\code{.cab}), it also exposes an API to create
CAB files. Support for reading \code{.cab} files is currently not
implemented; read support for the \code{.msi} database is possible.

This package aims to provide complete access to all tables in an
\code{.msi} file, therefore, it is a fairly low-level API. Two
primary applications of this package are the \module{distutils}
command \code{bdist_msi}, and the creation of Python installer
package itself (although that currently uses a different version
of \code{msilib}).

The package contents can be roughly split into four parts:
low-level CAB routines, low-level MSI routines, higher-level
MSI routines, and standard table structures.

\begin{funcdesc}{FCICreate}{cabname, files}
  Create a new CAB file named \var{cabname}. \var{files} must
  be a list of tuples, each containing the name of the file on
  disk, and the name of the file inside the CAB file.

  The files are added to the CAB file in the order they appear
  in the list. All files are added into a single CAB file,
  using the MSZIP compression algorithm.

  Callbacks to Python for the various steps of MSI creation
  are currently not exposed.
\end{funcdesc}

\begin{funcdesc}{UUIDCreate}{}
  Return the string representation of a new unique identifier.
  This wraps the Windows API functions \cfunction{UuidCreate} and
  \cfunction{UuidToString}.
\end{funcdesc}

\begin{funcdesc}{OpenDatabase}{path, persist}
  Return a new database object by calling MsiOpenDatabase.  
  \var{path} is the file name of the
  MSI file; \var{persist} can be one of the constants 
  \code{MSIDBOPEN_CREATEDIRECT}, \code{MSIDBOPEN_CREATE},
  \code{MSIDBOPEN_DIRECT}, \code{MSIDBOPEN_READONLY}, or
  \code{MSIDBOPEN_TRANSACT}, and may include the flag
  \code{MSIDBOPEN_PATCHFILE}. See the Microsoft documentation for
  the meaning of these flags; depending on the flags,
  an existing database is opened, or a new one created.
\end{funcdesc}

\begin{funcdesc}{CreateRecord}{count}
  Return a new record object by calling \cfunction{MSICreateRecord}.
  \var{count} is the number of fields of the record.
\end{funcdesc}

\begin{funcdesc}{init_database}{name, schema, ProductName, ProductCode, ProductVersion, Manufacturer}
  Create and return a new database \var{name}, initialize it 
  with \var{schema},  and set the properties \var{ProductName},
  \var{ProductCode}, \var{ProductVersion}, and \var{Manufacturer}.

  \var{schema} must be a module object containing \code{tables} and
  \code{_Validation_records} attributes; typically,
  \module{msilib.schema} should be used.

  The database will contain just the schema and the validation
  records when this function returns.
\end{funcdesc}

\begin{funcdesc}{add_data}{database, records}
  Add all \var{records} to \var{database}.  \var{records} should
  be a list of tuples, each one containing all fields of a record
  according to the schema of the table.  For optional fields,
  \code{None} can be passed.

  Field values can be int or long numbers, strings, or instances
  of the Binary class.
\end{funcdesc}

\begin{classdesc}{Binary}{filename}
  Represents entries in the Binary table; inserting such
  an object using \function{add_data} reads the file named
  \var{filename} into the table.
\end{classdesc}

\begin{funcdesc}{add_tables}{database, module}
  Add all table content from \var{module} to \var{database}.
  \var{module} must contain an attribute \var{tables}
  listing all tables for which content should be added,
  and one attribute per table that has the actual content.

  This is typically used to install the sequence tables.
\end{funcdesc}

\begin{funcdesc}{add_stream}{database, name, path}
  Add the file \var{path} into the \code{_Stream} table
  of \var{database}, with the stream name \var{name}.
\end{funcdesc}

\begin{funcdesc}{gen_uuid}{}
  Return a new UUID, in the format that MSI typically
  requires (i.e. in curly braces, and with all hexdigits
  in upper-case).
\end{funcdesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devnotes/winprog/fcicreate.asp]{FCICreateFile}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/uuidcreate.asp]{UuidCreate}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/uuidtostring.asp]{UuidToString}{}
\end{seealso}

\subsection{Database Objects\label{database-objects}}

\begin{methoddesc}{OpenView}{sql}
  Return a view object, by calling \cfunction{MSIDatabaseOpenView}.
  \var{sql} is the SQL statement to execute.
\end{methoddesc}

\begin{methoddesc}{Commit}{}
  Commit the changes pending in the current transaction,
  by calling \cfunction{MSIDatabaseCommit}.
\end{methoddesc}

\begin{methoddesc}{GetSummaryInformation}{count}
  Return a new summary information object, by calling
  \cfunction{MsiGetSummaryInformation}.  \var{count} is the maximum number of
  updated values.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msidatabaseopenview.asp]{MSIDatabaseOpenView}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msidatabasecommit.asp]{MSIDatabaseCommit}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msigetsummaryinformation.asp]{MSIGetSummaryInformation}{}
\end{seealso}

\subsection{View Objects\label{view-objects}}

\begin{methoddesc}{Execute}{\optional{params=None}}
  Execute the SQL query of the view, through \cfunction{MSIViewExecute}.
  \var{params} is an optional record describing actual values
  of the parameter tokens in the query.
\end{methoddesc}

\begin{methoddesc}{GetColumnInfo}{kind}
  Return a record describing the columns of the view, through
  calling \cfunction{MsiViewGetColumnInfo}. \var{kind} can be either
  \code{MSICOLINFO_NAMES} or \code{MSICOLINFO_TYPES}.
\end{methoddesc}

\begin{methoddesc}{Fetch}{}
  Return a result record of the query, through calling
  \cfunction{MsiViewFetch}.
\end{methoddesc}

\begin{methoddesc}{Modify}{kind, data}
  Modify the view, by calling \cfunction{MsiViewModify}. \var{kind}
  can be one of  \code{MSIMODIFY_SEEK}, \code{MSIMODIFY_REFRESH},
  \code{MSIMODIFY_INSERT}, \code{MSIMODIFY_UPDATE}, \code{MSIMODIFY_ASSIGN},
  \code{MSIMODIFY_REPLACE}, \code{MSIMODIFY_MERGE}, \code{MSIMODIFY_DELETE},
  \code{MSIMODIFY_INSERT_TEMPORARY}, \code{MSIMODIFY_VALIDATE},
  \code{MSIMODIFY_VALIDATE_NEW}, \code{MSIMODIFY_VALIDATE_FIELD}, or
  \code{MSIMODIFY_VALIDATE_DELETE}.

  \var{data} must be a record describing the new data.
\end{methoddesc}

\begin{methoddesc}{Close}{}
  Close the view, through \cfunction{MsiViewClose}.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewexecute.asp]{MsiViewExecute}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewgetcolumninfo.asp]{MSIViewGetColumnInfo}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewfetch.asp]{MsiViewFetch}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewmodify.asp]{MsiViewModify}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewclose.asp]{MsiViewClose}{}
\end{seealso}

\subsection{Summary Information Objects\label{summary-objects}}

\begin{methoddesc}{GetProperty}{field}
  Return a property of the summary, through \cfunction{MsiSummaryInfoGetProperty}.
  \var{field} is the name of the property, and can be one of the
  constants
  \code{PID_CODEPAGE}, \code{PID_TITLE}, \code{PID_SUBJECT},
  \code{PID_AUTHOR}, \code{PID_KEYWORDS}, \code{PID_COMMENTS},
  \code{PID_TEMPLATE}, \code{PID_LASTAUTHOR}, \code{PID_REVNUMBER},
  \code{PID_LASTPRINTED}, \code{PID_CREATE_DTM}, \code{PID_LASTSAVE_DTM},
  \code{PID_PAGECOUNT}, \code{PID_WORDCOUNT}, \code{PID_CHARCOUNT},
  \code{PID_APPNAME}, or \code{PID_SECURITY}.
\end{methoddesc}

\begin{methoddesc}{GetPropertyCount}{}
  Return the number of summary properties, through
  \cfunction{MsiSummaryInfoGetPropertyCount}.
\end{methoddesc}

\begin{methoddesc}{SetProperty}{field, value}
  Set a property through \cfunction{MsiSummaryInfoSetProperty}. \var{field}
  can have the same values as in \method{GetProperty}, \var{value}
  is the new value of the property. Possible value types are integer
  and string.
\end{methoddesc}

\begin{methoddesc}{Persist}{}
  Write the modified properties to the summary information stream,
  using \cfunction{MsiSummaryInfoPersist}.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfogetproperty.asp]{MsiSummaryInfoGetProperty}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfogetpropertycount.asp]{MsiSummaryInfoGetPropertyCount}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfosetproperty.asp]{MsiSummaryInfoSetProperty}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfopersist.asp]{MsiSummaryInfoPersist}{}
\end{seealso}

\subsection{Record Objects\label{record-objects}}

\begin{methoddesc}{GetFieldCount}{}
  Return the number of fields of the record, through \cfunction{MsiRecordGetFieldCount}.
\end{methoddesc}

\begin{methoddesc}{SetString}{field, value}
  Set \var{field} to \var{value} through \cfunction{MsiRecordSetString}.
  \var{field} must be an integer; \var{value} a string.
\end{methoddesc}

\begin{methoddesc}{SetStream}{field, value}
  Set \var{field} to the contents of the file named \var{value},
  through \cfunction{MsiRecordSetStream}.
  \var{field} must be an integer; \var{value} a string.
\end{methoddesc}

\begin{methoddesc}{SetInteger}{field, value}
  Set \var{field} to \var{value} through \cfunction{MsiRecordSetInteger}.
  Both \var{field} and \var{value} must be an integer.
\end{methoddesc}

\begin{methoddesc}{ClearData}{}
  Set all fields of the record to 0, through \cfunction{MsiRecordClearData}.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordgetfieldcount.asp]{MsiRecordGetFieldCount}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetstring.asp]{MsiRecordSetString}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetstream.asp]{MsiRecordSetStream}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetinteger.asp]{MsiRecordSetInteger}{}
  \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordclear.asp]{MsiRecordClear}{}
\end{seealso}

\subsection{Errors\label{msi-errors}}

All wrappers around MSI functions raise \exception{MsiError};
the string inside the exception will contain more detail.

\subsection{CAB Objects\label{cab}}

\begin{classdesc}{CAB}{name}
  The class \class{CAB} represents a CAB file. During MSI construction,
  files will be added simultaneously to the \code{Files} table, and
  to a CAB file. Then, when all files have been added, the CAB file
  can be written, then added to the MSI file.

  \var{name} is the name of the CAB file in the MSI file.
\end{classdesc}

\begin{methoddesc}[CAB]{append}{full, logical}
  Add the file with the pathname \var{full} to the CAB file,
  under the name \var{logical}. If there is already a file
  named \var{logical}, a new file name is created.

  Return the index of the file in the CAB file, and the
  new name of the file inside the CAB file.
\end{methoddesc}

\begin{methoddesc}[CAB]{append}{database}
  Generate a CAB file, add it as a stream to the MSI file,
  put it into the \code{Media} table, and remove the generated
  file from the disk.
\end{methoddesc}

\subsection{Directory Objects\label{msi-directory}}

\begin{classdesc}{Directory}{database, cab, basedir, physical, 
                  logical, default, component, \optional{componentflags}}
  Create a new directory in the Directory table. There is a current
  component at each point in time for the directory, which is either
  explicitly created through \method{start_component}, or implicitly when files
  are added for the first time. Files are added into the current
  component, and into the cab file.  To create a directory, a base
  directory object needs to be specified (can be \code{None}), the path to
  the physical directory, and a logical directory name.  \var{default}
  specifies the DefaultDir slot in the directory table. \var{componentflags}
  specifies the default flags that new components get.
\end{classdesc}

\begin{methoddesc}[Directory]{start_component}{\optional{component\optional{,
      feature\optional{, flags\optional{, keyfile\optional{, uuid}}}}}}
  Add an entry to the Component table, and make this component the
  current component for this directory. If no component name is given, the
  directory name is used. If no \var{feature} is given, the current feature
  is used. If no \var{flags} are given, the directory's default flags are
  used. If no \var{keyfile} is given, the KeyPath is left null in the
  Component table.
\end{methoddesc}

\begin{methoddesc}[Directory]{add_file}{file\optional{, src\optional{,
      version\optional{, language}}}}
  Add a file to the current component of the directory, starting a new
  one if there is no current component. By default, the file name
  in the source and the file table will be identical. If the \var{src} file
  is specified, it is interpreted relative to the current
  directory. Optionally, a \var{version} and a \var{language} can be specified for
  the entry in the File table.
\end{methoddesc}

\begin{methoddesc}[Directory]{glob}{pattern\optional{, exclude}}
  Add a list of files to the current component as specified in the glob
  pattern. Individual files can be excluded in the \var{exclude} list.
\end{methoddesc}

\begin{methoddesc}[Directory]{remove_pyc}{}
  Remove \code{.pyc}/\code{.pyo} files on uninstall.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/directory_table.asp]{Directory Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp]{File Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp]{Component Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/featurecomponents_table.asp]{FeatureComponents Table}{}
\end{seealso}


\subsection{Features\label{features}}

\begin{classdesc}{Feature}{database, id, title, desc, display\optional{,
    level=1\optional{, parent\optional{, directory\optional{, 
    attributes=0}}}}}

  Add a new record to the \code{Feature} table, using the values
  \var{id}, \var{parent.id}, \var{title}, \var{desc}, \var{display},
  \var{level}, \var{directory}, and \var{attributes}. The resulting
  feature object can be passed to the \method{start_component} method
  of \class{Directory}.
\end{classdesc}

\begin{methoddesc}[Feature]{set_current}{}
  Make this feature the current feature of \module{msilib}.
  New components are automatically added to the default feature,
  unless a feature is explicitly specified.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/feature_table.asp]{Feature Table}{}
\end{seealso}

\subsection{GUI classes\label{msi-gui}}

\module{msilib} provides several classes that wrap the GUI tables in
an MSI database. However, no standard user interface is provided; use
\module{bdist_msi} to create MSI files with a user-interface for
installing Python packages.

\begin{classdesc}{Control}{dlg, name}
  Base class of the dialog controls. \var{dlg} is the dialog object
  the control belongs to, and \var{name} is the control's name.
\end{classdesc}

\begin{methoddesc}[Control]{event}{event, argument\optional{, 
   condition = ``1''\optional{, ordering}}}

  Make an entry into the \code{ControlEvent} table for this control.
\end{methoddesc}

\begin{methoddesc}[Control]{mapping}{event, attribute}
  Make an entry into the \code{EventMapping} table for this control.
\end{methoddesc}

\begin{methoddesc}[Control]{condition}{action, condition}
  Make an entry into the \code{ControlCondition} table for this control.
\end{methoddesc}


\begin{classdesc}{RadioButtonGroup}{dlg, name, property}
  Create a radio button control named \var{name}. \var{property}
  is the installer property that gets set when a radio button
  is selected.
\end{classdesc}

\begin{methoddesc}[RadioButtonGroup]{add}{name, x, y, width, height, text
                                          \optional{, value}}
  Add a radio button named \var{name} to the group, at the
  coordinates \var{x}, \var{y}, \var{width}, \var{height}, and
  with the label \var{text}. If \var{value} is omitted, it
  defaults to \var{name}.
\end{methoddesc}
           
\begin{classdesc}{Dialog}{db, name, x, y, w, h, attr, title, first, 
    default, cancel}
  Return a new \class{Dialog} object. An entry in the \code{Dialog} table
  is made, with the specified coordinates, dialog attributes, title,
  name of the first, default, and cancel controls.
\end{classdesc}

\begin{methoddesc}[Dialog]{control}{name, type, x, y, width, height, 
                  attributes, property, text, control_next, help}
  Return a new \class{Control} object. An entry in the \code{Control} table
  is made with the specified parameters.

  This is a generic method; for specific types, specialized methods
  are provided.
\end{methoddesc}


\begin{methoddesc}[Dialog]{text}{name, x, y, width, height, attributes, text}
  Add and return a \code{Text} control.
\end{methoddesc}

\begin{methoddesc}[Dialog]{bitmap}{name, x, y, width, height, text}
  Add and return a \code{Bitmap} control.
\end{methoddesc}

\begin{methoddesc}[Dialog]{line}{name, x, y, width, height}
  Add and return a \code{Line} control.
\end{methoddesc}

\begin{methoddesc}[Dialog]{pushbutton}{name, x, y, width, height, attributes, 
                                 text, next_control}
  Add and return a \code{PushButton} control.
\end{methoddesc}

\begin{methoddesc}[Dialog]{radiogroup}{name, x, y, width, height, 
                                 attributes, property, text, next_control}
  Add and return a \code{RadioButtonGroup} control.
\end{methoddesc}

\begin{methoddesc}[Dialog]{checkbox}{name, x, y, width, height, 
                                 attributes, property, text, next_control}
  Add and return a \code{CheckBox} control.
\end{methoddesc}

\begin{seealso}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/dialog_table.asp]{Dialog Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/control_table.asp]{Control Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controls.asp]{Control Types}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controlcondition_table.asp]{ControlCondition Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controlevent_table.asp]{ControlEvent Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/eventmapping_table.asp]{EventMapping Table}{}
  \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/radiobutton_table.asp]{RadioButton Table}{}
\end{seealso}

\subsection{Precomputed tables\label{msi-tables}}

\module{msilib} provides a few subpackages that contain
only schema and table definitions. Currently, these definitions
are based on MSI version 2.0.

\begin{datadesc}{schema}
  This is the standard MSI schema for MSI 2.0, with the
  \var{tables} variable providing a list of table definitions,
  and \var{_Validation_records} providing the data for
  MSI validation.
\end{datadesc}

\begin{datadesc}{sequence}
  This module contains table contents for the standard sequence
  tables: \var{AdminExecuteSequence}, \var{AdminUISequence},
  \var{AdvtExecuteSequence}, \var{InstallExecuteSequence}, and
  \var{InstallUISequence}.
\end{datadesc}

\begin{datadesc}{text}
  This module contains definitions for the UIText and ActionText
  tables, for the standard installer actions.
\end{datadesc}
