创建产品清单
若要部署应用程序的必备组件,可以创建引导程序包。 引导程序包包含单个产品清单文件,但每个区域设置都有一个包清单。 包清单包含包的本地化特定方面。 这包括字符串、最终用户许可协议和语言包。
有关包清单的详细信息,请参阅如何:创建包清单。
创建产品清单
创建产品清单的步骤
为引导程序包创建目录。 此示例使用 C:\package。
在 Visual Studio 中,创建一个名为“product.xml”的新 XML 文件,并将其保存到 C:\package 文件夹中 。
添加以下 XML 来描述包的 XML 命名空间和产品代码。 将产品代码替换为包的唯一标识符。
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Custom.Bootstrapper.Package">
添加 XML 以指定包具有依赖项。 此示例使用 Microsoft Windows Installer 3.1 的依赖项。
<RelatedProducts> <DependsOnProduct Code="Microsoft.Windows.Installer.3.1" /> </RelatedProducts>
添加 XML 以列出引导程序包中的所有文件。 此示例使用包文件名 CorePackage.msi。
<PackageFiles> <PackageFile Name="CorePackage.msi"/> </PackageFiles>
将 CorePackage.msi 文件复制或移动到 C:\package 文件夹 。
添加 XML 以使用引导程序命令安装包。 引导程序会自动将 /qn 标记添加到 .msi 文件,该文件将以静默方式安装。 如果该文件是 .exe,引导程序将使用 shell 运行 .exe 文件 。 以下 XML 不显示 CorePackage.msi 的任何参数,但你可将命令行参数放入
Arguments
属性中。<Commands> <Command PackageFile="CorePackage.msi" Arguments="">
添加以下 XML 以检查是否安装了此引导程序包。 将产品代码替换为可再发行组件的 GUID。
<InstallChecks> <MsiProductCheck Property="IsMsiInstalled" Product="{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"/> </InstallChecks>
添加 XML 以更改引导程序行为,具体取决于是否已安装引导程序组件。 如果组件已安装,则引导程序包不会运行。 以下 XML 检查当前用户是否为管理员,因为此组件需要管理权限。
<InstallConditions> <BypassIf Property="IsMsiInstalled" Compare="ValueGreaterThan" Value="0"/> <FailIf Property="AdminUser" Compare="ValueNotEqualTo" Value="True" String="NotAnAdmin"/> </InstallConditions>
添加 XML 以设置安装成功时和需要重新启动时的退出代码。 以下 XML 演示 Fail 和 FailReboot 退出代码,它们表示引导程序将不会继续安装包。
<ExitCodes> <ExitCode Value="0" Result="Success"/> <ExitCode Value="1641" Result="SuccessReboot"/> <ExitCode Value="3010" Result="SuccessReboot"/> <DefaultExitCode Result="Fail" String="GeneralFailure"/> </ExitCodes>
添加以下 XML 以结束引导程序命令部分。
</Command> </Commands>
将 C:\package 文件夹移动到 Visual Studio 引导程序目录。 对于较旧版本的 Visual Studio,则为 \Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages 目录。
示例
产品清单包含自定义必备组件的安装说明。
<?xml version="1.0" encoding="utf-8" ?>
<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="Custom.Bootstrapper.Package">
<RelatedProducts>
<DependsOnProduct Code="Microsoft.Windows.Installer.3.1" />
</RelatedProducts>
<PackageFiles>
<PackageFile Name="CorePackage.msi"/>
</PackageFiles>
<InstallChecks>
<MsiProductCheck Property="IsMsiInstalled"
Product="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"/>
</InstallChecks>
<Commands>
<Command PackageFile="CorePackage.msi" Arguments="">
<InstallConditions>
<BypassIf Property="IsMsiInstalled"
Compare="ValueGreaterThan" Value="0"/>
<FailIf Property="AdminUser"
Compare="ValueNotEqualTo" Value="True"
String="NotAnAdmin"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" String="GeneralFailure"/>
</ExitCodes>
</Command>
</Commands>
</Product>