Thomas Wouters | 477c8d5 | 2006-05-27 19:21:47 +0000 | [diff] [blame^] | 1 | \section{\module{msilib} --- |
| 2 | Read and write Microsoft Installer files} |
| 3 | |
| 4 | \declaremodule{standard}{msilib} |
| 5 | \platform{Windows} |
| 6 | \modulesynopsis{Creation of Microsoft Installer files, and CAB files.} |
| 7 | \moduleauthor{Martin v. L\"owis}{martin@v.loewis.de} |
| 8 | \sectionauthor{Martin v. L\"owis}{martin@v.loewis.de} |
| 9 | |
| 10 | \index{msi} |
| 11 | |
| 12 | \versionadded{2.5} |
| 13 | |
| 14 | The \module{msilib} supports the creation of Microsoft Installer |
| 15 | (\code{.msi}) files. Because these files often contain an embedded |
| 16 | ``cabinet'' file (\code{.cab}), it also exposes an API to create |
| 17 | CAB files. Support for reading \code{.cab} files is currently not |
| 18 | implemented; read support for the \code{.msi} database is possible. |
| 19 | |
| 20 | This package aims to provide complete access to all tables in an |
| 21 | \code{.msi} file, therefore, it is a fairly low-level API. Two |
| 22 | primary applications of this package are the \module{distutils} |
| 23 | command \code{bdist_msi}, and the creation of Python installer |
| 24 | package itself (although that currently uses a different version |
| 25 | of \code{msilib}). |
| 26 | |
| 27 | The package contents can be roughly split into four parts: |
| 28 | low-level CAB routines, low-level MSI routines, higher-level |
| 29 | MSI routines, and standard table structures. |
| 30 | |
| 31 | \begin{funcdesc}{FCICreate}{cabname, files} |
| 32 | Create a new CAB file named \var{cabname}. \var{files} must |
| 33 | be a list of tuples, each containing the name of the file on |
| 34 | disk, and the name of the file inside the CAB file. |
| 35 | |
| 36 | The files are added to the CAB file in the order they appear |
| 37 | in the list. All files are added into a single CAB file, |
| 38 | using the MSZIP compression algorithm. |
| 39 | |
| 40 | Callbacks to Python for the various steps of MSI creation |
| 41 | are currently not exposed. |
| 42 | \end{funcdesc} |
| 43 | |
| 44 | \begin{funcdesc}{UUIDCreate}{} |
| 45 | Return the string representation of a new unique identifier. |
| 46 | This wraps the Windows API functions \cfunction{UuidCreate} and |
| 47 | \cfunction{UuidToString}. |
| 48 | \end{funcdesc} |
| 49 | |
| 50 | \begin{funcdesc}{OpenDatabase}{path, persist} |
| 51 | Return a new database object by calling MsiOpenDatabase. |
| 52 | \var{path} is the file name of the |
| 53 | MSI file; \var{persist} can be one of the constants |
| 54 | \code{MSIDBOPEN_CREATEDIRECT}, \code{MSIDBOPEN_CREATE}, |
| 55 | \code{MSIDBOPEN_DIRECT}, \code{MSIDBOPEN_READONLY}, or |
| 56 | \code{MSIDBOPEN_TRANSACT}, and may include the flag |
| 57 | \code{MSIDBOPEN_PATCHFILE}. See the Microsoft documentation for |
| 58 | the meaning of these flags; depending on the flags, |
| 59 | an existing database is opened, or a new one created. |
| 60 | \end{funcdesc} |
| 61 | |
| 62 | \begin{funcdesc}{CreateRecord}{count} |
| 63 | Return a new record object by calling \cfunction{MSICreateRecord}. |
| 64 | \var{count} is the number of fields of the record. |
| 65 | \end{funcdesc} |
| 66 | |
| 67 | \begin{funcdesc}{init_database}{name, schema, ProductName, ProductCode, ProductVersion, Manufacturer} |
| 68 | Create and return a new database \var{name}, initialize it |
| 69 | with \var{schema}, and set the properties \var{ProductName}, |
| 70 | \var{ProductCode}, \var{ProductVersion}, and \var{Manufacturer}. |
| 71 | |
| 72 | \var{schema} must be a module object containing \code{tables} and |
| 73 | \code{_Validation_records} attributes; typically, |
| 74 | \module{msilib.schema} should be used. |
| 75 | |
| 76 | The database will contain just the schema and the validation |
| 77 | records when this function returns. |
| 78 | \end{funcdesc} |
| 79 | |
| 80 | \begin{funcdesc}{add_data}{database, records} |
| 81 | Add all \var{records} to \var{database}. \var{records} should |
| 82 | be a list of tuples, each one containing all fields of a record |
| 83 | according to the schema of the table. For optional fields, |
| 84 | \code{None} can be passed. |
| 85 | |
| 86 | Field values can be int or long numbers, strings, or instances |
| 87 | of the Binary class. |
| 88 | \end{funcdesc} |
| 89 | |
| 90 | \begin{classdesc}{Binary}{filename} |
| 91 | Represents entries in the Binary table; inserting such |
| 92 | an object using \function{add_data} reads the file named |
| 93 | \var{filename} into the table. |
| 94 | \end{classdesc} |
| 95 | |
| 96 | \begin{funcdesc}{add_tables}{database, module} |
| 97 | Add all table content from \var{module} to \var{database}. |
| 98 | \var{module} must contain an attribute \var{tables} |
| 99 | listing all tables for which content should be added, |
| 100 | and one attribute per table that has the actual content. |
| 101 | |
| 102 | This is typically used to install the sequence tables. |
| 103 | \end{funcdesc} |
| 104 | |
| 105 | \begin{funcdesc}{add_stream}{database, name, path} |
| 106 | Add the file \var{path} into the \code{_Stream} table |
| 107 | of \var{database}, with the stream name \var{name}. |
| 108 | \end{funcdesc} |
| 109 | |
| 110 | \begin{funcdesc}{gen_uuid}{} |
| 111 | Return a new UUID, in the format that MSI typically |
| 112 | requires (i.e. in curly braces, and with all hexdigits |
| 113 | in upper-case). |
| 114 | \end{funcdesc} |
| 115 | |
| 116 | \begin{seealso} |
| 117 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devnotes/winprog/fcicreate.asp]{FCICreateFile}{} |
| 118 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/uuidcreate.asp]{UuidCreate}{} |
| 119 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/uuidtostring.asp]{UuidToString}{} |
| 120 | \end{seealso} |
| 121 | |
| 122 | \subsection{Database Objects\label{database-objects}} |
| 123 | |
| 124 | \begin{methoddesc}{OpenView}{sql} |
| 125 | Return a view object, by calling \cfunction{MSIDatabaseOpenView}. |
| 126 | \var{sql} is the SQL statement to execute. |
| 127 | \end{methoddesc} |
| 128 | |
| 129 | \begin{methoddesc}{Commit}{} |
| 130 | Commit the changes pending in the current transaction, |
| 131 | by calling \cfunction{MSIDatabaseCommit}. |
| 132 | \end{methoddesc} |
| 133 | |
| 134 | \begin{methoddesc}{GetSummaryInformation}{count} |
| 135 | Return a new summary information object, by calling |
| 136 | \cfunction{MsiGetSummaryInformation}. \var{count} is the maximum number of |
| 137 | updated values. |
| 138 | \end{methoddesc} |
| 139 | |
| 140 | \begin{seealso} |
| 141 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiopenview.asp]{MSIOpenView}{} |
| 142 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msidatabasecommit.asp]{MSIDatabaseCommit}{} |
| 143 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msigetsummaryinformation.asp]{MSIGetSummaryInformation}{} |
| 144 | \end{seealso} |
| 145 | |
| 146 | \subsection{View Objects\label{view-objects}} |
| 147 | |
| 148 | \begin{methoddesc}{Execute}{\optional{params=None}} |
| 149 | Execute the SQL query of the view, through \cfunction{MSIViewExecute}. |
| 150 | \var{params} is an optional record describing actual values |
| 151 | of the parameter tokens in the query. |
| 152 | \end{methoddesc} |
| 153 | |
| 154 | \begin{methoddesc}{GetColumnInfo}{kind} |
| 155 | Return a record describing the columns of the view, through |
| 156 | calling \cfunction{MsiViewGetColumnInfo}. \var{kind} can be either |
| 157 | \code{MSICOLINFO_NAMES} or \code{MSICOLINFO_TYPES}. |
| 158 | \end{methoddesc} |
| 159 | |
| 160 | \begin{methoddesc}{Fetch}{} |
| 161 | Return a result record of the query, through calling |
| 162 | \cfunction{MsiViewFetch}. |
| 163 | \end{methoddesc} |
| 164 | |
| 165 | \begin{methoddesc}{Modify}{kind, data} |
| 166 | Modify the view, by calling \cfunction{MsiViewModify}. \var{kind} |
| 167 | can be one of \code{MSIMODIFY_SEEK}, \code{MSIMODIFY_REFRESH}, |
| 168 | \code{MSIMODIFY_INSERT}, \code{MSIMODIFY_UPDATE}, \code{MSIMODIFY_ASSIGN}, |
| 169 | \code{MSIMODIFY_REPLACE}, \code{MSIMODIFY_MERGE}, \code{MSIMODIFY_DELETE}, |
| 170 | \code{MSIMODIFY_INSERT_TEMPORARY}, \code{MSIMODIFY_VALIDATE}, |
| 171 | \code{MSIMODIFY_VALIDATE_NEW}, \code{MSIMODIFY_VALIDATE_FIELD}, or |
| 172 | \code{MSIMODIFY_VALIDATE_DELETE}. |
| 173 | |
| 174 | \var{data} must be a record describing the new data. |
| 175 | \end{methoddesc} |
| 176 | |
| 177 | \begin{methoddesc}{Close}{} |
| 178 | Close the view, through \cfunction{MsiViewClose}. |
| 179 | \end{methoddesc} |
| 180 | |
| 181 | \begin{seealso} |
| 182 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewexecute.asp]{MsiViewExecute}{} |
| 183 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewgetcolumninfo.asp]{MSIViewGetColumnInfo}{} |
| 184 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewfetch.asp]{MsiViewFetch}{} |
| 185 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewmodify.asp]{MsiViewModify}{} |
| 186 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewclose.asp]{MsiViewClose}{} |
| 187 | \end{seealso} |
| 188 | |
| 189 | \subsection{Summary Information Objects\label{summary-objects}} |
| 190 | |
| 191 | \begin{methoddesc}{GetProperty}{field} |
| 192 | Return a property of the summary, through \cfunction{MsiSummaryInfoGetProperty}. |
| 193 | \var{field} is the name of the property, and can be one of the |
| 194 | constants |
| 195 | \code{PID_CODEPAGE}, \code{PID_TITLE}, \code{PID_SUBJECT}, |
| 196 | \code{PID_AUTHOR}, \code{PID_KEYWORDS}, \code{PID_COMMENTS}, |
| 197 | \code{PID_TEMPLATE}, \code{PID_LASTAUTHOR}, \code{PID_REVNUMBER}, |
| 198 | \code{PID_LASTPRINTED}, \code{PID_CREATE_DTM}, \code{PID_LASTSAVE_DTM}, |
| 199 | \code{PID_PAGECOUNT}, \code{PID_WORDCOUNT}, \code{PID_CHARCOUNT}, |
| 200 | \code{PID_APPNAME}, or \code{PID_SECURITY}. |
| 201 | \end{methoddesc} |
| 202 | |
| 203 | \begin{methoddesc}{GetPropertyCount}{} |
| 204 | Return the number of summary properties, through |
| 205 | \cfunction{MsiSummaryInfoGetPropertyCount}. |
| 206 | \end{methoddesc} |
| 207 | |
| 208 | \begin{methoddesc}{SetProperty}{field, value} |
| 209 | Set a property through \cfunction{MsiSummaryInfoSetProperty}. \var{field} |
| 210 | can have the same values as in \method{GetProperty}, \var{value} |
| 211 | is the new value of the property. Possible value types are integer |
| 212 | and string. |
| 213 | \end{methoddesc} |
| 214 | |
| 215 | \begin{methoddesc}{Persist}{} |
| 216 | Write the modified properties to the summary information stream, |
| 217 | using \cfunction{MsiSummaryInfoPersist}. |
| 218 | \end{methoddesc} |
| 219 | |
| 220 | \begin{seealso} |
| 221 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfogetproperty.asp]{MsiSummaryInfoGetProperty}{} |
| 222 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfogetpropertycount.asp]{MsiSummaryInfoGetPropertyCount}{} |
| 223 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfosetproperty.asp]{MsiSummaryInfoSetProperty}{} |
| 224 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfopersist.asp]{MsiSummaryInfoPersist}{} |
| 225 | \end{seealso} |
| 226 | |
| 227 | \subsection{Record Objects\label{record-objects}} |
| 228 | |
| 229 | \begin{methoddesc}{GetFieldCount}{} |
| 230 | Return the number of fields of the record, through \cfunction{MsiRecordGetFieldCount}. |
| 231 | \end{methoddesc} |
| 232 | |
| 233 | \begin{methoddesc}{SetString}{field, value} |
| 234 | Set \var{field} to \var{value} through \cfunction{MsiRecordSetString}. |
| 235 | \var{field} must be an integer; \var{value} a string. |
| 236 | \end{methoddesc} |
| 237 | |
| 238 | \begin{methoddesc}{SetStream}{field, value} |
| 239 | Set \var{field} to the contents of the file named \var{value}, |
| 240 | through \cfunction{MsiRecordSetStream}. |
| 241 | \var{field} must be an integer; \var{value} a string. |
| 242 | \end{methoddesc} |
| 243 | |
| 244 | \begin{methoddesc}{SetInteger}{field, value} |
| 245 | Set \var{field} to \var{value} through \cfunction{MsiRecordSetInteger}. |
| 246 | Both \var{field} and \var{value} must be an integer. |
| 247 | \end{methoddesc} |
| 248 | |
| 249 | \begin{methoddesc}{ClearData}{} |
| 250 | Set all fields of the record to 0, through \cfunction{MsiRecordClearData}. |
| 251 | \end{methoddesc} |
| 252 | |
| 253 | \begin{seealso} |
| 254 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordgetfieldcount.asp]{MsiRecordGetFieldCount}{} |
| 255 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetstring.asp]{MsiRecordSetString}{} |
| 256 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetstream.asp]{MsiRecordSetStream}{} |
| 257 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetinteger.asp]{MsiRecordSetInteger}{} |
| 258 | \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordclear.asp]{MsiRecordClear}{} |
| 259 | \end{seealso} |
| 260 | |
| 261 | \subsection{Errors\label{msi-errors}} |
| 262 | |
| 263 | All wrappers around MSI functions raise \exception{MsiError}; |
| 264 | the string inside the exception will contain more detail. |
| 265 | |
| 266 | \subsection{CAB Objects\label{cab}} |
| 267 | |
| 268 | \begin{classdesc}{CAB}{name} |
| 269 | The class \class{CAB} represents a CAB file. During MSI construction, |
| 270 | files will be added simultaneously to the \code{Files} table, and |
| 271 | to a CAB file. Then, when all files have been added, the CAB file |
| 272 | can be written, then added to the MSI file. |
| 273 | |
| 274 | \var{name} is the name of the CAB file in the MSI file. |
| 275 | \end{classdesc} |
| 276 | |
| 277 | \begin{methoddesc}[CAB]{append}{full, logical} |
| 278 | Add the file with the pathname \var{full} to the CAB file, |
| 279 | under the name \var{logical}. If there is already a file |
| 280 | named \var{logical}, a new file name is created. |
| 281 | |
| 282 | Return the index of the file in the CAB file, and the |
| 283 | new name of the file inside the CAB file. |
| 284 | \end{methoddesc} |
| 285 | |
| 286 | \begin{methoddesc}[CAB]{append}{database} |
| 287 | Generate a CAB file, add it as a stream to the MSI file, |
| 288 | put it into the \code{Media} table, and remove the generated |
| 289 | file from the disk. |
| 290 | \end{methoddesc} |
| 291 | |
| 292 | \subsection{Directory Objects\label{msi-directory}} |
| 293 | |
| 294 | \begin{classdesc}{Directory}{database, cab, basedir, physical, |
| 295 | logical, default, component, \optional{componentflags}} |
| 296 | Create a new directory in the Directory table. There is a current |
| 297 | component at each point in time for the directory, which is either |
| 298 | explicitly created through \method{start_component}, or implicitly when files |
| 299 | are added for the first time. Files are added into the current |
| 300 | component, and into the cab file. To create a directory, a base |
| 301 | directory object needs to be specified (can be \code{None}), the path to |
| 302 | the physical directory, and a logical directory name. \var{default} |
| 303 | specifies the DefaultDir slot in the directory table. \var{componentflags} |
| 304 | specifies the default flags that new components get. |
| 305 | \end{classdesc} |
| 306 | |
| 307 | \begin{methoddesc}[Directory]{start_component}{\optional{component\optional{, |
| 308 | feature\optional{, flags\optional{, keyfile\optional{, uuid}}}}}} |
| 309 | Add an entry to the Component table, and make this component the |
| 310 | current component for this directory. If no component name is given, the |
| 311 | directory name is used. If no \var{feature} is given, the current feature |
| 312 | is used. If no \var{flags} are given, the directory's default flags are |
| 313 | used. If no \var{keyfile} is given, the KeyPath is left null in the |
| 314 | Component table. |
| 315 | \end{methoddesc} |
| 316 | |
| 317 | \begin{methoddesc}[Directory]{add_file}{file\optional{, src\optional{, |
| 318 | version\optional{, language}}}} |
| 319 | Add a file to the current component of the directory, starting a new |
| 320 | one if there is no current component. By default, the file name |
| 321 | in the source and the file table will be identical. If the \var{src} file |
| 322 | is specified, it is interpreted relative to the current |
| 323 | directory. Optionally, a \var{version} and a \var{language} can be specified for |
| 324 | the entry in the File table. |
| 325 | \end{methoddesc} |
| 326 | |
| 327 | \begin{methoddesc}[Directory]{glob}{pattern\optional{, exclude}} |
| 328 | Add a list of files to the current component as specified in the glob |
| 329 | pattern. Individual files can be excluded in the \var{exclude} list. |
| 330 | \end{methoddesc} |
| 331 | |
| 332 | \begin{methoddesc}[Directory]{remove_pyc}{} |
| 333 | Remove \code{.pyc}/\code{.pyo} files on uninstall. |
| 334 | \end{methoddesc} |
| 335 | |
| 336 | \begin{seealso} |
| 337 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/directory_table.asp]{Directory Table}{} |
| 338 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp]{File Table}{} |
| 339 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp]{Component Table}{} |
| 340 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/featurecomponents_table.asp]{FeatureComponents Table}{} |
| 341 | \end{seealso} |
| 342 | |
| 343 | |
| 344 | \subsection{Features\label{features}} |
| 345 | |
| 346 | \begin{classdesc}{Feature}{database, id, title, desc, display\optional{, |
| 347 | level=1\optional{, parent\optional\{, directory\optional{, |
| 348 | attributes=0}}}} |
| 349 | |
| 350 | Add a new record to the \code{Feature} table, using the values |
| 351 | \var{id}, \var{parent.id}, \var{title}, \var{desc}, \var{display}, |
| 352 | \var{level}, \var{directory}, and \var{attributes}. The resulting |
| 353 | feature object can be passed to the \method{start_component} method |
| 354 | of \class{Directory}. |
| 355 | \end{classdesc} |
| 356 | |
| 357 | \begin{methoddesc}[Feature]{set_current}{} |
| 358 | Make this feature the current feature of \module{msilib}. |
| 359 | New components are automatically added to the default feature, |
| 360 | unless a feature is explicitly specified. |
| 361 | \end{methoddesc} |
| 362 | |
| 363 | \begin{seealso} |
| 364 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/feature_table.asp]{Feature Table}{} |
| 365 | \end{seealso} |
| 366 | |
| 367 | \subsection{GUI classes\label{msi-gui}} |
| 368 | |
| 369 | \module{msilib} provides several classes that wrap the GUI tables in |
| 370 | an MSI database. However, no standard user interface is provided; use |
| 371 | \module{bdist_msi} to create MSI files with a user-interface for |
| 372 | installing Python packages. |
| 373 | |
| 374 | \begin{classdesc}{Control}{dlg, name} |
| 375 | Base class of the dialog controls. \var{dlg} is the dialog object |
| 376 | the control belongs to, and \var{name} is the control's name. |
| 377 | \end{classdesc} |
| 378 | |
| 379 | \begin{methoddesc}[Control]{event}{event, argument\optional{, |
| 380 | condition = ``1''\optional{, ordering}}} |
| 381 | |
| 382 | Make an entry into the \code{ControlEvent} table for this control. |
| 383 | \end{methoddesc} |
| 384 | |
| 385 | \begin{methoddesc}[Control]{mapping}{event, attribute} |
| 386 | Make an entry into the \code{EventMapping} table for this control. |
| 387 | \end{methoddesc} |
| 388 | |
| 389 | \begin{methoddesc}[Control]{condition}{action, condition} |
| 390 | Make an entry into the \code{ControlCondition} table for this control. |
| 391 | \end{methoddesc} |
| 392 | |
| 393 | |
| 394 | \begin{classdesc}{RadioButtonGroup}{dlg, name, property} |
| 395 | Create a radio button control named \var{name}. \var{property} |
| 396 | is the installer property that gets set when a radio button |
| 397 | is selected. |
| 398 | \end{classdesc} |
| 399 | |
| 400 | \begin{methoddesc}[RadioButtonGroup]{add}{name, x, y, width, height, text |
| 401 | \optional{, value}} |
| 402 | Add a radio button named \var{name} to the group, at the |
| 403 | coordinates \var{x}, \var{y}, \var{width}, \var{height}, and |
| 404 | with the label \var{text}. If \var{value} is omitted, it |
| 405 | defaults to \var{name}. |
| 406 | \end{methoddesc} |
| 407 | |
| 408 | \begin{classdesc}{Dialog}{db, name, x, y, w, h, attr, title, first, |
| 409 | default, cancel} |
| 410 | Return a new \class{Dialog} object. An entry in the \code{Dialog} table |
| 411 | is made, with the specified coordinates, dialog attributes, title, |
| 412 | name of the first, default, and cancel controls. |
| 413 | \end{classdesc} |
| 414 | |
| 415 | \begin{methoddesc}[Dialog]{control}{name, type, x, y, width, height, |
| 416 | attributes, property, text, control_next, help} |
| 417 | Return a new \class{Control} object. An entry in the \code{Control} table |
| 418 | is made with the specified parameters. |
| 419 | |
| 420 | This is a generic method; for specific types, specialized methods |
| 421 | are provided. |
| 422 | \end{methoddesc} |
| 423 | |
| 424 | |
| 425 | \begin{methoddesc}[Dialog]{text}{name, x, y, width, height, attributes, text} |
| 426 | Add and return a \code{Text} control. |
| 427 | \end{methoddesc} |
| 428 | |
| 429 | \begin{methoddesc}[Dialog]{bitmap}{name, x, y, width, height, text} |
| 430 | Add and return a \code{Bitmap} control. |
| 431 | \end{methoddesc} |
| 432 | |
| 433 | \begin{methoddesc}[Dialog]{line}{name, x, y, width, height} |
| 434 | Add and return a \code{Line} control. |
| 435 | \end{methoddesc} |
| 436 | |
| 437 | \begin{methoddesc}[Dialog]{pushbutton}{name, x, y, width, height, attributes, |
| 438 | text, next_control} |
| 439 | Add and return a \code{PushButton} control. |
| 440 | \end{methoddesc} |
| 441 | |
| 442 | \begin{methoddesc}[Dialog]{radiogroup}{name, x, y, width, height, |
| 443 | attributes, property, text, next_control} |
| 444 | Add and return a \code{RadioButtonGroup} control. |
| 445 | \end{methoddesc} |
| 446 | |
| 447 | \begin{methoddesc}[Dialog]{checkbox}{name, x, y, width, height, |
| 448 | attributes, property, text, next_control} |
| 449 | Add and return a \code{CheckBox} control. |
| 450 | \end{methoddesc} |
| 451 | |
| 452 | \begin{seealso} |
| 453 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/dialog_table.asp]{Dialog Table}{} |
| 454 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/control_table.asp]{Control Table}{} |
| 455 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controls.asp]{Control Types}{} |
| 456 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controlcondition_table.asp]{ControlCondition Table}{} |
| 457 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controlevent_table.asp]{ControlEvent Table}{} |
| 458 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/eventmapping_table.asp]{EventMapping Table}{} |
| 459 | \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/radiobutton_table.asp]{RadioButton Table}{} |
| 460 | \end{seealso} |
| 461 | |
| 462 | \subsection{Precomputed tables\label{msi-tables}} |
| 463 | |
| 464 | \module{msilib} provides a few subpackages that contain |
| 465 | only schema and table definitions. Currently, these definitions |
| 466 | are based on MSI version 2.0. |
| 467 | |
| 468 | \begin{datadesc}{schema} |
| 469 | This is the standard MSI schema for MSI 2.0, with the |
| 470 | \var{tables} variable providing a list of table definitions, |
| 471 | and \var{_Validation_records} providing the data for |
| 472 | MSI validation. |
| 473 | \end{datadesc} |
| 474 | |
| 475 | \begin{datadesc}{sequence} |
| 476 | This module contains table contents for the standard sequence |
| 477 | tables: \var{AdminExecuteSequence}, \var{AdminUISequence}, |
| 478 | \var{AdvtExecuteSequence}, \var{InstallExecuteSequence}, and |
| 479 | \var{InstallUISequence}. |
| 480 | \end{datadesc} |
| 481 | |
| 482 | \begin{datadesc}{text} |
| 483 | This module contains definitions for the UIText and ActionText |
| 484 | tables, for the standard installer actions. |
| 485 | \end{datadesc} |