uTools-Manuals/docs/python/msilib.html
2019-04-08 23:22:26 +08:00

1 line
48 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-msilib"><h1><span class="yiyi-st" id="yiyi-10">34.1. <a class="reference internal" href="#module-msilib" title="msilib: Creation of Microsoft Installer files, and CAB files. (Windows)"><code class="xref py py-mod docutils literal"><span class="pre">msilib</span></code></a> - 读取和写入Microsoft安装程序文件</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/msilib/__init__.py">Lib / msilib / __ init __。py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-msilib" title="msilib: Creation of Microsoft Installer files, and CAB files. (Windows)"><code class="xref py py-mod docutils literal"><span class="pre">msilib</span></code></a>支持创建Microsoft Installer<code class="docutils literal"><span class="pre">.msi</span></code>)文件。</span><span class="yiyi-st" id="yiyi-13">因为这些文件通常包含嵌入的“cabinet”文件<code class="docutils literal"><span class="pre">.cab</span></code>所以它还公开了一个API来创建CAB文件。</span><span class="yiyi-st" id="yiyi-14">支持读取<code class="docutils literal"><span class="pre">.cab</span></code>文件目前未实现;可以读取对<code class="docutils literal"><span class="pre">.msi</span></code>数据库的支持。</span></p><p><span class="yiyi-st" id="yiyi-15">此包旨在提供对<code class="docutils literal"><span class="pre">.msi</span></code>文件中所有表的完全访问因此它是一个相当低级的API。</span><span class="yiyi-st" id="yiyi-16">此包的两个主要应用程序是<a class="reference internal" href="distutils.html#module-distutils" title="distutils: Support for building and installing Python modules into an existing Python installation."><code class="xref py py-mod docutils literal"><span class="pre">distutils</span></code></a>命令<code class="docutils literal"><span class="pre">bdist_msi</span></code>和创建Python安装程序包本身虽然目前使用不同版本的<code class="docutils literal"><span class="pre">msilib</span></code></span></p><p><span class="yiyi-st" id="yiyi-17">包内容可大致分为四个部分低级CAB例程低级MSI例程更高级MSI例程和标准表结构。</span></p><dl class="function"><dt id="msilib.FCICreate"><span class="yiyi-st" id="yiyi-18"> <code class="descclassname">msilib.</code><code class="descname">FCICreate</code><span class="sig-paren">(</span><em>cabname</em>, <em>files</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-19">创建名为<em>cabname</em>的新CAB文件。</span><span class="yiyi-st" id="yiyi-20"><em>文件</em>必须是元组列表每个元组包含磁盘上文件的名称和CAB文件中的文件名称。</span></p><p><span class="yiyi-st" id="yiyi-21">这些文件将按照它们在列表中显示的顺序添加到CAB文件。</span><span class="yiyi-st" id="yiyi-22">使用MSZIP压缩算法将所有文件添加到单个CAB文件中。</span></p><p><span class="yiyi-st" id="yiyi-23">目前没有公开回调到Python的MSI创建的各个步骤。</span></p></dd></dl><dl class="function"><dt id="msilib.UuidCreate"><span class="yiyi-st" id="yiyi-24"> <code class="descclassname">msilib.</code><code class="descname">UuidCreate</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-25">返回新的唯一标识符的字符串表示形式。</span><span class="yiyi-st" id="yiyi-26">它包装Windows API函数<code class="xref c c-func docutils literal"><span class="pre">UuidCreate()</span></code><code class="xref c c-func docutils literal"><span class="pre">UuidToString()</span></code></span></p></dd></dl><dl class="function"><dt id="msilib.OpenDatabase"><span class="yiyi-st" id="yiyi-27"> <code class="descclassname">msilib.</code><code class="descname">OpenDatabase</code><span class="sig-paren">(</span><em>path</em>, <em>persist</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-28">通过调用MsiOpenDatabase返回一个新的数据库对象。</span><span class="yiyi-st" id="yiyi-29"><em>path</em>是MSI文件的文件名 <em>persist</em>可以是常数<code class="docutils literal"><span class="pre">MSIDBOPEN_CREATEDIRECT</span></code><code class="docutils literal"><span class="pre">MSIDBOPEN_CREATE</span></code><code class="docutils literal"><span class="pre">MSIDBOPEN_DIRECT</span></code><code class="docutils literal"><span class="pre">MSIDBOPEN_READONLY</span></code><code class="docutils literal"><span class="pre">MSIDBOPEN_TRANSACT</span></code>,并且可以包括标志<code class="docutils literal"><span class="pre">MSIDBOPEN_PATCHFILE</span></code></span><span class="yiyi-st" id="yiyi-30">有关这些标志的含义请参阅Microsoft文档根据标志打开现有数据库或创建新数据库。</span></p></dd></dl><dl class="function"><dt id="msilib.CreateRecord"><span class="yiyi-st" id="yiyi-31"> <code class="descclassname">msilib.</code><code class="descname">CreateRecord</code><span class="sig-paren">(</span><em>count</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-32">通过调用<code class="xref c c-func docutils literal"><span class="pre">MSICreateRecord()</span></code>返回一个新的记录对象。</span><span class="yiyi-st" id="yiyi-33"><em>count</em>是记录的字段数。</span></p></dd></dl><dl class="function"><dt id="msilib.init_database"><span class="yiyi-st" id="yiyi-34"> <code class="descclassname">msilib.</code><code class="descname">init_database</code><span class="sig-paren">(</span><em>name</em>, <em>schema</em>, <em>ProductName</em>, <em>ProductCode</em>, <em>ProductVersion</em>, <em>Manufacturer</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-35">Create and return a new database <em>name</em>, initialize it with <em>schema</em>, and set the properties <em>ProductName</em>, <em>ProductCode</em>, <em>ProductVersion</em>, and <em>Manufacturer</em>.</span></p><p><span class="yiyi-st" id="yiyi-36"><em>模式</em>必须是包含<code class="docutils literal"><span class="pre">tables</span></code><code class="docutils literal"><span class="pre">_Validation_records</span></code>属性的模块对象;通常,应使用<a class="reference internal" href="#msilib.schema" title="msilib.schema"><code class="xref py py-mod docutils literal"><span class="pre">msilib.schema</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-37">此函数返回时,数据库将仅包含模式和验证记录。</span></p></dd></dl><dl class="function"><dt id="msilib.add_data"><span class="yiyi-st" id="yiyi-38"> <code class="descclassname">msilib.</code><code class="descname">add_data</code><span class="sig-paren">(</span><em>database</em>, <em>table</em>, <em>records</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-39">将所有<em>记录</em>添加到<em>数据库</em>中名为<em></em>的表。</span></p><p><span class="yiyi-st" id="yiyi-40"><em></em>参数必须是MSI模式中的预定义表之一例如。</span><span class="yiyi-st" id="yiyi-41"><code class="docutils literal"><span class="pre">'Feature'</span></code>, <code class="docutils literal"><span class="pre">'File'</span></code>, <code class="docutils literal"><span class="pre">'Component'</span></code>, <code class="docutils literal"><span class="pre">'Dialog'</span></code>, <code class="docutils literal"><span class="pre">'Control'</span></code>, etc.</span></p><p><span class="yiyi-st" id="yiyi-42"><em>记录</em>应该是元组的列表,每个元组包含根据表的模式的记录的所有字段。</span><span class="yiyi-st" id="yiyi-43">对于可选字段,可以传递<code class="docutils literal"><span class="pre">None</span></code></span></p><p><span class="yiyi-st" id="yiyi-44">字段值可以是二进制类的int字符串或实例。</span></p></dd></dl><dl class="class"><dt id="msilib.Binary"><span class="yiyi-st" id="yiyi-45"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">Binary</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-46">表示二进制表中的条目;使用<a class="reference internal" href="#msilib.add_data" title="msilib.add_data"><code class="xref py py-func docutils literal"><span class="pre">add_data()</span></code></a>插入此类对象会将名为<em>filename</em>的文件读入表中。</span></p></dd></dl><dl class="function"><dt id="msilib.add_tables"><span class="yiyi-st" id="yiyi-47"> <code class="descclassname">msilib.</code><code class="descname">add_tables</code><span class="sig-paren">(</span><em>database</em>, <em>module</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-48"><em>模块</em>中的所有表内容添加到<em>数据库</em></span><span class="yiyi-st" id="yiyi-49"><em>模块</em>必须包含属性<em>tables</em>,其中列出了应添加内容的所有表,以及每个具有实际内容的表的一个属性。</span></p><p><span class="yiyi-st" id="yiyi-50">这通常用于安装序列表。</span></p></dd></dl><dl class="function"><dt id="msilib.add_stream"><span class="yiyi-st" id="yiyi-51"> <code class="descclassname">msilib.</code><code class="descname">add_stream</code><span class="sig-paren">(</span><em>database</em>, <em>name</em>, <em>path</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-52"><em>路径</em>添加到<em>数据库</em><code class="docutils literal"><span class="pre">_Stream</span></code>表中,流名称为<em>name</em></span></p></dd></dl><dl class="function"><dt id="msilib.gen_uuid"><span class="yiyi-st" id="yiyi-53"> <code class="descclassname">msilib.</code><code class="descname">gen_uuid</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-54">以MSI通常需要的格式返回新的UUID。</span><span class="yiyi-st" id="yiyi-55">在大括号中,并且所有十六进制在大写)。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-56">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-57"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/devnotes/winprog/fcicreate.asp">FCICreateFile</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/rpc/rpc/uuidcreate.asp">UuidCreate</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/rpc/rpc/uuidtostring.asp">UuidToString</a></span></p></div><div class="section" id="database-objects"><h2><span class="yiyi-st" id="yiyi-58">34.1.1. </span><span class="yiyi-st" id="yiyi-59">Database Objects</span></h2><dl class="method"><dt id="msilib.Database.OpenView"><span class="yiyi-st" id="yiyi-60"> <code class="descclassname">Database.</code><code class="descname">OpenView</code><span class="sig-paren">(</span><em>sql</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-61">通过调用<code class="xref c c-func docutils literal"><span class="pre">MSIDatabaseOpenView()</span></code>返回视图对象。</span><span class="yiyi-st" id="yiyi-62"><em>sql</em>是要执行的SQL语句。</span></p></dd></dl><dl class="method"><dt id="msilib.Database.Commit"><span class="yiyi-st" id="yiyi-63"> <code class="descclassname">Database.</code><code class="descname">Commit</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-64">通过调用<code class="xref c c-func docutils literal"><span class="pre">MSIDatabaseCommit()</span></code>来提交当前事务中待完成的更改。</span></p></dd></dl><dl class="method"><dt id="msilib.Database.GetSummaryInformation"><span class="yiyi-st" id="yiyi-65"> <code class="descclassname">Database.</code><code class="descname">GetSummaryInformation</code><span class="sig-paren">(</span><em>count</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-66">通过调用<code class="xref c c-func docutils literal"><span class="pre">MsiGetSummaryInformation()</span></code>返回新的摘要信息对象。</span><span class="yiyi-st" id="yiyi-67"><em>count</em>是更新值的最大数量。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-68">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-69"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msidatabaseopenview.asp">MSIDatabaseOpenView</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msidatabasecommit.asp">MSIDatabaseCommit</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msigetsummaryinformation.asp">MSIGetSummaryInformation</a></span></p></div></div><div class="section" id="view-objects"><h2><span class="yiyi-st" id="yiyi-70">34.1.2. </span><span class="yiyi-st" id="yiyi-71">View Objects</span></h2><dl class="method"><dt id="msilib.View.Execute"><span class="yiyi-st" id="yiyi-72"> <code class="descclassname">View.</code><code class="descname">Execute</code><span class="sig-paren">(</span><em>params</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-73">通过<code class="xref c c-func docutils literal"><span class="pre">MSIViewExecute()</span></code>执行视图的SQL查询。</span><span class="yiyi-st" id="yiyi-74">如果<em>params</em>不是<code class="docutils literal"><span class="pre">None</span></code>,则它是描述查询中参数标记的实际值的记录。</span></p></dd></dl><dl class="method"><dt id="msilib.View.GetColumnInfo"><span class="yiyi-st" id="yiyi-75"> <code class="descclassname">View.</code><code class="descname">GetColumnInfo</code><span class="sig-paren">(</span><em>kind</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-76">通过调用<code class="xref c c-func docutils literal"><span class="pre">MsiViewGetColumnInfo()</span></code>返回描述视图列的记录。</span><span class="yiyi-st" id="yiyi-77"><em>种类</em>可以是<code class="docutils literal"><span class="pre">MSICOLINFO_NAMES</span></code><code class="docutils literal"><span class="pre">MSICOLINFO_TYPES</span></code></span></p></dd></dl><dl class="method"><dt id="msilib.View.Fetch"><span class="yiyi-st" id="yiyi-78"> <code class="descclassname">View.</code><code class="descname">Fetch</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-79">通过调用<code class="xref c c-func docutils literal"><span class="pre">MsiViewFetch()</span></code>返回查询的结果记录。</span></p></dd></dl><dl class="method"><dt id="msilib.View.Modify"><span class="yiyi-st" id="yiyi-80"> <code class="descclassname">View.</code><code class="descname">Modify</code><span class="sig-paren">(</span><em>kind</em>, <em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-81">通过调用<code class="xref c c-func docutils literal"><span class="pre">MsiViewModify()</span></code>修改视图。</span><span class="yiyi-st" id="yiyi-82"><em>kind</em> can be one of <code class="docutils literal"><span class="pre">MSIMODIFY_SEEK</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_REFRESH</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_INSERT</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_UPDATE</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_ASSIGN</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_REPLACE</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_MERGE</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_DELETE</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_INSERT_TEMPORARY</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_VALIDATE</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_VALIDATE_NEW</span></code>, <code class="docutils literal"><span class="pre">MSIMODIFY_VALIDATE_FIELD</span></code>, or <code class="docutils literal"><span class="pre">MSIMODIFY_VALIDATE_DELETE</span></code>.</span></p><p><span class="yiyi-st" id="yiyi-83"><em>数据</em>必须是描述新数据的记录。</span></p></dd></dl><dl class="method"><dt id="msilib.View.Close"><span class="yiyi-st" id="yiyi-84"> <code class="descclassname">View.</code><code class="descname">Close</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-85">通过<code class="xref c c-func docutils literal"><span class="pre">MsiViewClose()</span></code>关闭视图。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-86">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-87"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msiviewexecute.asp">MsiViewExecute</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msiviewgetcolumninfo.asp">MSIViewGetColumnInfo</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msiviewfetch.asp">MsiViewFetch</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msiviewmodify.asp">MsiViewModify</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msiviewclose.asp">MsiViewClose</a></span></p></div></div><div class="section" id="summary-information-objects"><h2><span class="yiyi-st" id="yiyi-88">34.1.3. </span><span class="yiyi-st" id="yiyi-89">Summary Information Objects</span></h2><dl class="method"><dt id="msilib.SummaryInformation.GetProperty"><span class="yiyi-st" id="yiyi-90"> <code class="descclassname">SummaryInformation.</code><code class="descname">GetProperty</code><span class="sig-paren">(</span><em>field</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-91">通过<code class="xref c c-func docutils literal"><span class="pre">MsiSummaryInfoGetProperty()</span></code>返回摘要的属性。</span><span class="yiyi-st" id="yiyi-92"><em>field</em> is the name of the property, and can be one of the constants <code class="docutils literal"><span class="pre">PID_CODEPAGE</span></code>, <code class="docutils literal"><span class="pre">PID_TITLE</span></code>, <code class="docutils literal"><span class="pre">PID_SUBJECT</span></code>, <code class="docutils literal"><span class="pre">PID_AUTHOR</span></code>, <code class="docutils literal"><span class="pre">PID_KEYWORDS</span></code>, <code class="docutils literal"><span class="pre">PID_COMMENTS</span></code>, <code class="docutils literal"><span class="pre">PID_TEMPLATE</span></code>, <code class="docutils literal"><span class="pre">PID_LASTAUTHOR</span></code>, <code class="docutils literal"><span class="pre">PID_REVNUMBER</span></code>, <code class="docutils literal"><span class="pre">PID_LASTPRINTED</span></code>, <code class="docutils literal"><span class="pre">PID_CREATE_DTM</span></code>, <code class="docutils literal"><span class="pre">PID_LASTSAVE_DTM</span></code>, <code class="docutils literal"><span class="pre">PID_PAGECOUNT</span></code>, <code class="docutils literal"><span class="pre">PID_WORDCOUNT</span></code>, <code class="docutils literal"><span class="pre">PID_CHARCOUNT</span></code>, <code class="docutils literal"><span class="pre">PID_APPNAME</span></code>, or <code class="docutils literal"><span class="pre">PID_SECURITY</span></code>.</span></p></dd></dl><dl class="method"><dt id="msilib.SummaryInformation.GetPropertyCount"><span class="yiyi-st" id="yiyi-93"> <code class="descclassname">SummaryInformation.</code><code class="descname">GetPropertyCount</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-94">通过<code class="xref c c-func docutils literal"><span class="pre">MsiSummaryInfoGetPropertyCount()</span></code>返回摘要属性的数量。</span></p></dd></dl><dl class="method"><dt id="msilib.SummaryInformation.SetProperty"><span class="yiyi-st" id="yiyi-95"> <code class="descclassname">SummaryInformation.</code><code class="descname">SetProperty</code><span class="sig-paren">(</span><em>field</em>, <em>value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-96">通过<code class="xref c c-func docutils literal"><span class="pre">MsiSummaryInfoSetProperty()</span></code>设置属性。</span><span class="yiyi-st" id="yiyi-97"><em>字段</em>可以具有与<a class="reference internal" href="#msilib.SummaryInformation.GetProperty" title="msilib.SummaryInformation.GetProperty"><code class="xref py py-meth docutils literal"><span class="pre">GetProperty()</span></code></a>中相同的值,<em>value</em>是属性的新值。</span><span class="yiyi-st" id="yiyi-98">可能的值类型是整数和字符串。</span></p></dd></dl><dl class="method"><dt id="msilib.SummaryInformation.Persist"><span class="yiyi-st" id="yiyi-99"> <code class="descclassname">SummaryInformation.</code><code class="descname">Persist</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-100">使用<code class="xref c c-func docutils literal"><span class="pre">MsiSummaryInfoPersist()</span></code>将修改后的属性写入摘要信息流。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-101">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-102"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msisummaryinfogetproperty.asp">MsiSummaryInfoGetProperty</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msisummaryinfogetpropertycount.asp">MsiSummaryInfoGetPropertyCount</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msisummaryinfosetproperty.asp">MsiSummaryInfoSetProperty</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msisummaryinfopersist.asp">MsiSummaryInfoPersist</a></span></p></div></div><div class="section" id="record-objects"><h2><span class="yiyi-st" id="yiyi-103">34.1.4. </span><span class="yiyi-st" id="yiyi-104">Record Objects</span></h2><dl class="method"><dt id="msilib.Record.GetFieldCount"><span class="yiyi-st" id="yiyi-105"> <code class="descclassname">Record.</code><code class="descname">GetFieldCount</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-106">通过<code class="xref c c-func docutils literal"><span class="pre">MsiRecordGetFieldCount()</span></code>返回记录的字段数。</span></p></dd></dl><dl class="method"><dt id="msilib.Record.GetInteger"><span class="yiyi-st" id="yiyi-107"> <code class="descclassname">Record.</code><code class="descname">GetInteger</code><span class="sig-paren">(</span><em>field</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-108">在可能的情况下,将<em>字段</em>的值作为整数返回。</span><span class="yiyi-st" id="yiyi-109"><em>字段</em>必须为整数。</span></p></dd></dl><dl class="method"><dt id="msilib.Record.GetString"><span class="yiyi-st" id="yiyi-110"> <code class="descclassname">Record.</code><code class="descname">GetString</code><span class="sig-paren">(</span><em>field</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-111">在可能的情况下,将<em>字段</em>的值作为字符串返回。</span><span class="yiyi-st" id="yiyi-112"><em>字段</em>必须为整数。</span></p></dd></dl><dl class="method"><dt id="msilib.Record.SetString"><span class="yiyi-st" id="yiyi-113"> <code class="descclassname">Record.</code><code class="descname">SetString</code><span class="sig-paren">(</span><em>field</em>, <em>value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-114"><em>字段</em>设置为<em></em><code class="xref c c-func docutils literal"><span class="pre">MsiRecordSetString()</span></code></span><span class="yiyi-st" id="yiyi-115"><em>字段</em>必须为整数; <em></em>字符串。</span></p></dd></dl><dl class="method"><dt id="msilib.Record.SetStream"><span class="yiyi-st" id="yiyi-116"> <code class="descclassname">Record.</code><code class="descname">SetStream</code><span class="sig-paren">(</span><em>field</em>, <em>value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-117">通过<code class="xref c c-func docutils literal"><span class="pre">MsiRecordSetStream()</span></code><em>字段</em>设置为名为<em></em>的文件的内容。</span><span class="yiyi-st" id="yiyi-118"><em>字段</em>必须为整数; <em></em>字符串。</span></p></dd></dl><dl class="method"><dt id="msilib.Record.SetInteger"><span class="yiyi-st" id="yiyi-119"> <code class="descclassname">Record.</code><code class="descname">SetInteger</code><span class="sig-paren">(</span><em>field</em>, <em>value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-120"><em>字段</em>设置为<em></em><code class="xref c c-func docutils literal"><span class="pre">MsiRecordSetInteger()</span></code></span><span class="yiyi-st" id="yiyi-121"><em>字段</em><em></em>必须为整数。</span></p></dd></dl><dl class="method"><dt id="msilib.Record.ClearData"><span class="yiyi-st" id="yiyi-122"> <code class="descclassname">Record.</code><code class="descname">ClearData</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-123">通过<code class="xref c c-func docutils literal"><span class="pre">MsiRecordClearData()</span></code>将记录的所有字段设置为0。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-124">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-125"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msirecordgetfieldcount.asp">MsiRecordGetFieldCount</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msirecordsetstring.asp">MsiRecordSetString</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msirecordsetstream.asp">MsiRecordSetStream</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msirecordsetinteger.asp">MsiRecordSetInteger</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msirecordclear.asp">MsiRecordClear</a></span></p></div></div><div class="section" id="errors"><h2><span class="yiyi-st" id="yiyi-126">34.1.5. </span><span class="yiyi-st" id="yiyi-127">Errors</span></h2><p><span class="yiyi-st" id="yiyi-128">MSI函数周围的所有封装引发<code class="xref py py-exc docutils literal"><span class="pre">MsiError</span></code>;字符串里面的异常将包含更多的细节。</span></p></div><div class="section" id="cab-objects"><h2><span class="yiyi-st" id="yiyi-129">34.1.6. </span><span class="yiyi-st" id="yiyi-130">CAB Objects</span></h2><dl class="class"><dt id="msilib.CAB"><span class="yiyi-st" id="yiyi-131"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">CAB</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-132"><a class="reference internal" href="#msilib.CAB" title="msilib.CAB"><code class="xref py py-class docutils literal"><span class="pre">CAB</span></code></a>表示CAB文件。</span><span class="yiyi-st" id="yiyi-133">在MSI构建期间文件将同时添加到<code class="docutils literal"><span class="pre">Files</span></code>表和CAB文件。</span><span class="yiyi-st" id="yiyi-134">然后当添加了所有文件后可以写入CAB文件然后将其添加到MSI文件。</span></p><p><span class="yiyi-st" id="yiyi-135"><em>name</em>是MSI文件中的CAB文件的名称。</span></p><dl class="method"><dt id="msilib.CAB.append"><span class="yiyi-st" id="yiyi-136"> <code class="descname">append</code><span class="sig-paren">(</span><em>full</em>, <em>file</em>, <em>logical</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-137">将路径名称为<em>full</em>的文件添加到CAB文件中名称<em>logical</em></span><span class="yiyi-st" id="yiyi-138">如果已有一个名为<em>logical</em>的文件,则会创建一个新文件名。</span></p><p><span class="yiyi-st" id="yiyi-139">返回CAB文件中文件的索引以及CAB文件中文件的新名称。</span></p></dd></dl><dl class="method"><dt id="msilib.CAB.commit"><span class="yiyi-st" id="yiyi-140"> <code class="descname">commit</code><span class="sig-paren">(</span><em>database</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-141">生成CAB文件将其作为流添加到MSI文件将其放入<code class="docutils literal"><span class="pre">Media</span></code>表中,并从磁盘中删除生成的文件。</span></p></dd></dl></dd></dl></div><div class="section" id="directory-objects"><h2><span class="yiyi-st" id="yiyi-142">34.1.7. </span><span class="yiyi-st" id="yiyi-143">Directory Objects</span></h2><dl class="class"><dt id="msilib.Directory"><span class="yiyi-st" id="yiyi-144"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">Directory</code><span class="sig-paren">(</span><em>database</em>, <em>cab</em>, <em>basedir</em>, <em>physical</em>, <em>logical</em>, <em>default</em><span class="optional">[</span>, <em>componentflags</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-145">在目录表中创建一个新目录。</span><span class="yiyi-st" id="yiyi-146">目录的每个时间点都有一个当前组件,它通过<a class="reference internal" href="#msilib.Directory.start_component" title="msilib.Directory.start_component"><code class="xref py py-meth docutils literal"><span class="pre">start_component()</span></code></a>显式创建,或者在第一次添加文件时隐式创建。</span><span class="yiyi-st" id="yiyi-147">文件添加到当前组件中并添加到cab文件中。</span><span class="yiyi-st" id="yiyi-148">要创建目录,需要指定基本目录对象(可以是<code class="docutils literal"><span class="pre">None</span></code>),物理目录的路径和逻辑目录名称。</span><span class="yiyi-st" id="yiyi-149"><em>默认</em>指定目录表中的DefaultDir插槽。</span><span class="yiyi-st" id="yiyi-150"><em>componentflags</em>指定新组件获取的默认标志。</span></p><dl class="method"><dt id="msilib.Directory.start_component"><span class="yiyi-st" id="yiyi-151"> <code class="descname">start_component</code><span class="sig-paren">(</span><em>component=None</em>, <em>feature=None</em>, <em>flags=None</em>, <em>keyfile=None</em>, <em>uuid=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-152">向组件表中添加一个条目,并使此组件成为此目录的当前组件。</span><span class="yiyi-st" id="yiyi-153">如果没有给出组件名称,则使用目录名称。</span><span class="yiyi-st" id="yiyi-154">如果未给出<em>特征</em>,则使用当前特征。</span><span class="yiyi-st" id="yiyi-155">如果没有给出<em>标志</em>,则使用目录的默认标志。</span><span class="yiyi-st" id="yiyi-156">如果未给出<em>密钥文件</em>则KeyPath在组件表中保留为空。</span></p></dd></dl><dl class="method"><dt id="msilib.Directory.add_file"><span class="yiyi-st" id="yiyi-157"> <code class="descname">add_file</code><span class="sig-paren">(</span><em>file</em>, <em>src=None</em>, <em>version=None</em>, <em>language=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-158">将一个文件添加到目录的当前组件,如果没有当前组件,则启动一个新的组件。</span><span class="yiyi-st" id="yiyi-159">默认情况下,源和文件表中的文件名将是相同的。</span><span class="yiyi-st" id="yiyi-160">如果指定了<em>src</em>文件,则相对于当前目录进行解释。</span><span class="yiyi-st" id="yiyi-161">或者,可以为文件表中的条目指定<em>版本</em><em>语言</em></span></p></dd></dl><dl class="method"><dt id="msilib.Directory.glob"><span class="yiyi-st" id="yiyi-162"> <code class="descname">glob</code><span class="sig-paren">(</span><em>pattern</em>, <em>exclude=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-163">向glob模式中指定的当前组件添加文件列表。</span><span class="yiyi-st" id="yiyi-164">可以在<em>排除</em>列表中排除单个文件。</span></p></dd></dl><dl class="method"><dt id="msilib.Directory.remove_pyc"><span class="yiyi-st" id="yiyi-165"> <code class="descname">remove_pyc</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-166">在卸载时删除<code class="docutils literal"><span class="pre">.pyc</span></code> / <code class="docutils literal"><span class="pre">.pyo</span></code>文件。</span></p></dd></dl></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-167">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-168"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/directory_table.asp">目录表</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/file_table.asp">文件表</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/component_table.asp">组件表</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/featurecomponents_table.asp">FeatureComponents表</a></span></p></div></div><div class="section" id="features"><h2><span class="yiyi-st" id="yiyi-169">34.1.8. </span><span class="yiyi-st" id="yiyi-170">Features</span></h2><dl class="class"><dt id="msilib.Feature"><span class="yiyi-st" id="yiyi-171"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">Feature</code><span class="sig-paren">(</span><em>db</em>, <em>id</em>, <em>title</em>, <em>desc</em>, <em>display</em>, <em>level=1</em>, <em>parent=None</em>, <em>directory=None</em>, <em>attributes=0</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-172">Add a new record to the <code class="docutils literal"><span class="pre">Feature</span></code> table, using the values <em>id</em>, <em>parent.id</em>, <em>title</em>, <em>desc</em>, <em>display</em>, <em>level</em>, <em>directory</em>, and <em>attributes</em>. </span><span class="yiyi-st" id="yiyi-173">生成的特征对象可以传递到<a class="reference internal" href="#msilib.Directory" title="msilib.Directory"><code class="xref py py-class docutils literal"><span class="pre">Directory</span></code></a><code class="xref py py-meth docutils literal"><span class="pre">start_component()</span></code>方法。</span></p><dl class="method"><dt id="msilib.Feature.set_current"><span class="yiyi-st" id="yiyi-174"> <code class="descname">set_current</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-175">将此功能设为<a class="reference internal" href="#module-msilib" title="msilib: Creation of Microsoft Installer files, and CAB files. (Windows)"><code class="xref py py-mod docutils literal"><span class="pre">msilib</span></code></a>的当前功能。</span><span class="yiyi-st" id="yiyi-176">新组件将自动添加到默认要素,除非显式指定要素。</span></p></dd></dl></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-177">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-178"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/feature_table.asp">功能表</a></span></p></div></div><div class="section" id="gui-classes"><h2><span class="yiyi-st" id="yiyi-179">34.1.9. </span><span class="yiyi-st" id="yiyi-180">GUI classes</span></h2><p><span class="yiyi-st" id="yiyi-181"><a class="reference internal" href="#module-msilib" title="msilib: Creation of Microsoft Installer files, and CAB files. (Windows)"><code class="xref py py-mod docutils literal"><span class="pre">msilib</span></code></a>提供了几个将GUI表包装在MSI数据库中的类。</span><span class="yiyi-st" id="yiyi-182">然而,没有提供标准用户界面;使用<a class="reference internal" href="../distutils/apiref.html#module-distutils.command.bdist_msi" title="distutils.command.bdist_msi: Build a binary distribution as a Windows MSI file"><code class="xref py py-mod docutils literal"><span class="pre">bdist_msi</span></code></a>创建具有用于安装Python软件包的用户界面的MSI文件。</span></p><dl class="class"><dt id="msilib.Control"><span class="yiyi-st" id="yiyi-183"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">Control</code><span class="sig-paren">(</span><em>dlg</em>, <em>name</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-184">对话框控件的基类。</span><span class="yiyi-st" id="yiyi-185"><em>dlg</em>是控件所属的对话框对象,<em>name</em>是控件的名称。</span></p><dl class="method"><dt id="msilib.Control.event"><span class="yiyi-st" id="yiyi-186"> <code class="descname">event</code><span class="sig-paren">(</span><em>event</em>, <em>argument</em>, <em>condition=1</em>, <em>ordering=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-187">对此控件的<code class="docutils literal"><span class="pre">ControlEvent</span></code>表进行输入。</span></p></dd></dl><dl class="method"><dt id="msilib.Control.mapping"><span class="yiyi-st" id="yiyi-188"> <code class="descname">mapping</code><span class="sig-paren">(</span><em>event</em>, <em>attribute</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-189">在此控件的<code class="docutils literal"><span class="pre">EventMapping</span></code>表中输入内容。</span></p></dd></dl><dl class="method"><dt id="msilib.Control.condition"><span class="yiyi-st" id="yiyi-190"> <code class="descname">condition</code><span class="sig-paren">(</span><em>action</em>, <em>condition</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-191">对此控件的<code class="docutils literal"><span class="pre">ControlCondition</span></code>表进行输入。</span></p></dd></dl></dd></dl><dl class="class"><dt id="msilib.RadioButtonGroup"><span class="yiyi-st" id="yiyi-192"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">RadioButtonGroup</code><span class="sig-paren">(</span><em>dlg</em>, <em>name</em>, <em>property</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-193">创建名为<em>名称</em>的单选按钮控件。</span><span class="yiyi-st" id="yiyi-194"><em>属性</em>是在选择单选按钮时设置的安装程序属性。</span></p><dl class="method"><dt id="msilib.RadioButtonGroup.add"><span class="yiyi-st" id="yiyi-195"> <code class="descname">add</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>text</em>, <em>value=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-196">向坐标<em>x</em><em>y</em><em>宽度</em><em>添加名为<em>名称</em>的单选按钮height</em>和标签<em>text</em></span><span class="yiyi-st" id="yiyi-197">如果<em></em><code class="docutils literal"><span class="pre">None</span></code>,则默认为<em>名称</em></span></p></dd></dl></dd></dl><dl class="class"><dt id="msilib.Dialog"><span class="yiyi-st" id="yiyi-198"> <em class="property">class </em><code class="descclassname">msilib.</code><code class="descname">Dialog</code><span class="sig-paren">(</span><em>db</em>, <em>name</em>, <em>x</em>, <em>y</em>, <em>w</em>, <em>h</em>, <em>attr</em>, <em>title</em>, <em>first</em>, <em>default</em>, <em>cancel</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-199">返回一个新的<a class="reference internal" href="#msilib.Dialog" title="msilib.Dialog"><code class="xref py py-class docutils literal"><span class="pre">Dialog</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-200"><code class="docutils literal"><span class="pre">Dialog</span></code>表中创建一个条目,指定的坐标,对话框属性,标题,第一个,默认和取消控件的名称。</span></p><dl class="method"><dt id="msilib.Dialog.control"><span class="yiyi-st" id="yiyi-201"> <code class="descname">control</code><span class="sig-paren">(</span><em>name</em>, <em>type</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>attributes</em>, <em>property</em>, <em>text</em>, <em>control_next</em>, <em>help</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-202">返回新的<a class="reference internal" href="#msilib.Control" title="msilib.Control"><code class="xref py py-class docutils literal"><span class="pre">Control</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-203"><code class="docutils literal"><span class="pre">Control</span></code>表中的条目使用指定的参数。</span></p><p><span class="yiyi-st" id="yiyi-204">这是一个通用的方法;对于特定类型,提供专门的方法。</span></p></dd></dl><dl class="method"><dt id="msilib.Dialog.text"><span class="yiyi-st" id="yiyi-205"> <code class="descname">text</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>attributes</em>, <em>text</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-206">添加并返回<code class="docutils literal"><span class="pre">Text</span></code>控件。</span></p></dd></dl><dl class="method"><dt id="msilib.Dialog.bitmap"><span class="yiyi-st" id="yiyi-207"> <code class="descname">bitmap</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>text</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-208">添加并返回<code class="docutils literal"><span class="pre">Bitmap</span></code>控件。</span></p></dd></dl><dl class="method"><dt id="msilib.Dialog.line"><span class="yiyi-st" id="yiyi-209"> <code class="descname">line</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-210">添加并返回<code class="docutils literal"><span class="pre">Line</span></code>控件。</span></p></dd></dl><dl class="method"><dt id="msilib.Dialog.pushbutton"><span class="yiyi-st" id="yiyi-211"> <code class="descname">pushbutton</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>attributes</em>, <em>text</em>, <em>next_control</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-212">添加并返回<code class="docutils literal"><span class="pre">PushButton</span></code>控件。</span></p></dd></dl><dl class="method"><dt id="msilib.Dialog.radiogroup"><span class="yiyi-st" id="yiyi-213"> <code class="descname">radiogroup</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>attributes</em>, <em>property</em>, <em>text</em>, <em>next_control</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-214">添加并返回<code class="docutils literal"><span class="pre">RadioButtonGroup</span></code>控件。</span></p></dd></dl><dl class="method"><dt id="msilib.Dialog.checkbox"><span class="yiyi-st" id="yiyi-215"> <code class="descname">checkbox</code><span class="sig-paren">(</span><em>name</em>, <em>x</em>, <em>y</em>, <em>width</em>, <em>height</em>, <em>attributes</em>, <em>property</em>, <em>text</em>, <em>next_control</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-216">添加并返回<code class="docutils literal"><span class="pre">CheckBox</span></code>控件。</span></p></dd></dl></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-217">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-218"><a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/dialog_table.asp">对话框</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/control_table.asp">控制表</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/controls.asp">控制类型</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/controlcondition_table.asp">ControlCondition表</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/controlevent_table.asp">ControlEvent表</a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/eventmapping_table.asp"></a> <a class="reference external" href="https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/radiobutton_table.asp">RadioButton表</a></span></p></div></div><div class="section" id="precomputed-tables"><h2><span class="yiyi-st" id="yiyi-219">34.1.10. </span><span class="yiyi-st" id="yiyi-220">Precomputed tables</span></h2><p><span class="yiyi-st" id="yiyi-221"><a class="reference internal" href="#module-msilib" title="msilib: Creation of Microsoft Installer files, and CAB files. (Windows)"><code class="xref py py-mod docutils literal"><span class="pre">msilib</span></code></a>提供了几个仅包含模式和表定义的子包。</span><span class="yiyi-st" id="yiyi-222">目前这些定义基于MSI 2.0版。</span></p><dl class="data"><dt id="msilib.schema"><span class="yiyi-st" id="yiyi-223"> <code class="descclassname">msilib.</code><code class="descname">schema</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-224">这是MSI 2.0的标准MSI模式其中<em></em>变量​​提供表定义列表,<em>_Validation_records</em>提供MSI验证数据。</span></p></dd></dl><dl class="data"><dt id="msilib.sequence"><span class="yiyi-st" id="yiyi-225"> <code class="descclassname">msilib.</code><code class="descname">sequence</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-226">此模块包含标准序列表的表内容:<em>AdminExecuteSequence</em><em>AdminUISequence</em><em>AdvtExecuteSequence</em><em>InstallExecuteSequence</em><em> InstallUISequence</em></span></p></dd></dl><dl class="data"><dt id="msilib.text"><span class="yiyi-st" id="yiyi-227"> <code class="descclassname">msilib.</code><code class="descname">text</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-228">此模块包含标准安装程序操作的UIText和ActionText表的定义。</span></p></dd></dl></div></div></div>