创建引导程序包
安装程序是可配置为检测并安装可再发行组件(如 Windows Installer (.msi) 文件和可执行程序)的一般安装程序。 安装程序也称为“引导程序”。 它通过一组 XML 清单进行编程,这些清单指定用于管理组件安装的元数据。
引导程序首先检测是否已安装所有系统必备组件。 如果未安装系统必备组件,引导程序将首先显示相关许可协议。 接着,在最终用户接受许可协议后,将开始安装相应的系统必备组件。 否则,如果检测到所有的系统必备组件,引导程序将直接启动应用程序的安装程序。
创建自定义程序包
可以使用引导程序清单生成器来创建描述引导程序包的清单。 或者,也可以使用 Visual Studio 中的 XML 编辑器来生成清单。 有关更多信息,请参见如何:创建程序包清单和如何:创建产品清单。 若要查看创建引导程序包的示例,请参见演练:创建自定义引导程序以显示隐私提示。
若要创建引导程序包,必须向引导程序清单生成器提供 EXE 或 MSI 文件形式的可再发行组件。 然后,引导程序清单生成器将会创建以下文件:
产品清单 product.xml,包含程序包的所有非特定语言的元数据。 它包含可再发行组件的所有本地化版本通用的元数据。
程序包清单 package.xml,包含特定语言的元数据;它通常包含本地化的错误消息。 必须至少为组件的每个本地化版本提供一个程序包清单。
在创建这两个文件之后,请将产品清单文件放置在一个依据自定义引导程序命名的文件夹中。 程序包清单文件将放置到一个依据区域设置命名的文件夹中。 例如,如果程序包清单文件针对的是英语版的再发行程序,请将该文件放置在一个名为 en 的文件夹中。 对于每个区域设置(如 ja 代表日语,de 代表德语)重复此过程。 最终的自定义引导程序包的文件夹结构将如下所示。
CustomBootstrapperPackage
product.xml
CustomBootstrapper.msi
de
eula.rtf
package.xml
en
eula.rtf
package.xml
ja
eula.rtf
package.xml
最后,将可再发行的文件复制到引导程序文件夹位置。 有关更多信息,请参见如何:创建本地化的引导程序包。
\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages
也可以根据以下注册表项中的**“Path”**值确定引导程序文件夹位置:
HKLM\Software\Microsoft\GenericBootstrapper\4.0
每个可再发行组件均位于程序包目录下它们自己的子文件夹中。 产品清单和可再发行文件将放置到此子文件夹中。 组件的本地化版本以及程序包清单将放置到根据区域性名称命名的子文件夹中。 有关区域性名称的更多信息,请参见Localization 属性中的表。
在将这些文件复制到引导程序文件夹中之后,相应的引导程序包将自动出现在 Visual Studio 的“系统必备”对话框中。 如果您的自定义引导程序包未显示,请关闭并重新打开“系统必备”对话框。 有关更多信息,请参见“系统必备”对话框。
下表显示由引导程序自动填充的属性。
Property |
说明 |
---|---|
ApplicationName |
应用程序的名称。 |
ProcessorArchitecture |
可执行文件的目标平台的处理器和每字位数。 包括以下值:
|
Microsoft Windows 95、Windows 98 或 Windows ME 操作系统的版本号。 版本的语法是 Major.Minor.ServicePack。 |
|
Windows NT、Windows 2000、Windows XP、Windows Vista、Windows Server 2008 或 Windows 7 操作系统的版本号。 版本的语法是 Major.Minor.ServicePack。 |
|
安装期间运行的 Windows Installer 程序集 (msi.dll) 的版本。 |
|
如果用户具有管理员特权,则设置此属性。 值为 true 或 false。 |
|
InstallMode |
安装模式指示需要安装组件的位置。 包括以下值:
|
使可再发行文件与应用程序安装分离
您可以阻止在安装项目中部署可再发行文件。 为此,请在 .NET Framework 目录的 RedistList 文件夹中创建一个可再发行文件列表:
%ProgramFiles%\Microsoft.NET\RedistList
可再发行文件列表是一个 XML 文件,您应采用下面的格式命名该文件:公司名称.组件名称.RedistList.xml。 举例来说,如果组件名为 Datawidgets 且由 Acme 开发,则使用 Acme.DataWidgets.RedistList.xml。 可再发行文件列表的内容的示例可能像下面这样:
<?xml version="1.0" encoding="UTF-8"?>
<FileList Redist="Acme.DataWidgets" >
<File AssemblyName="Acme.DataGrid" Version="1.0.0.0" PublicKeyToken="b03f5f7f11d50a3a" Culture="neutral" ProcessorArchitecture="MSIL" InGAC="true" />
</FileList>