安装程序是一个通用安装程序,可配置为检测和安装可再发行组件(如 Windows Installer(.msi)文件和可执行程序。 安装程序也称为引导程序。 它通过一组 XML 清单进行编程,这些清单指定要管理组件的安装的元数据。 ClickOnce 的“先决条件 ”对话框中显示的每个可再发行组件或必备组件都是引导程序包。 引导程序包是一组目录和文件,其中包含描述应如何安装先决条件的清单文件。
引导程序首先检测是否已安装任何必备组件。 如果未安装先决条件,首先引导程序会显示许可协议。 其次,最终用户接受许可协议后,将开始安装先决条件。 否则,如果检测到所有先决条件,引导程序将启动应用程序安装程序。
创建自定义引导程序包
可以使用 Visual Studio 中的 XML 编辑器生成引导程序清单。 若要查看创建引导程序包的示例,请参阅 演练:使用隐私提示创建自定义引导程序。
若要创建引导程序包,必须创建产品清单,并为组件的每个本地化版本创建一个包清单。
产品清单 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 (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages*
或
*<VS Install Path>\MSBuild\Microsoft\VisualStudio\BootstrapperPackages*
注释
从 Visual Studio 2019 Update 7 版本开始,Visual Studio 安装路径下列出的路径有效。
还可以从以下注册表项中的 Path 值中找到引导程序文件夹位置:
*HKLM\Software\Microsoft\GenericBootstrapper*
在 64 位系统上,使用以下注册表项:
*HKLM\Software\Wow6432Node\Microsoft\GenericBootstrapper*
每个可再发行组件都显示在包目录下的自己的子文件夹中。 产品清单和可再发行文件必须放入此子文件夹中。 组件和包清单的本地化版本必须放入按文化名称命名的子文件夹中。
将这些文件复制到引导程序文件夹中后,引导程序包会自动显示在 Visual Studio 先决条件 对话框中。 如果自定义引导程序包未显示,请关闭,然后重新打开 “先决条件 ”对话框。 有关详细信息,请参阅 “先决条件”对话框。
下表显示了引导程序自动填充的属性。
资产 | DESCRIPTION |
---|---|
应用程序名称 | 应用程序的名称。 |
处理器架构 | 可执行文件面向的平台的处理器和字长。 包括以下值: -英特尔 - IA64 - AMD64 |
VersionNT | Windows 操作系统的版本号。 版本的语法为 Major.Minor.ServicePack。 |
VersionMSI | 在安装过程中运行的 Windows Installer 程序集版本(msi.dll)。 |
AdminUser | 如果用户具有管理员权限,则设置此属性。 值为 true 或 false。 |
安装模式 | 安装模式指示需要从何处安装组件。 包括以下值: - HomeSite - 先决条件需要从供应商的网站获取和安装。 - SpecificSite - 先决条件是从所选位置安装的。 - SameSite - 从应用程序所在的同一位置安装必备组件。 |
将可再发行组件与应用程序安装分开
可以防止在安装程序项目中部署可再发行组件。 为此,请在 .NET Framework 目录中的 RedistList 文件夹中创建可再发行列表:
%ProgramFiles%\Microsoft.NET\RedistList
可再发行组件列表是一个 XML 文件,应使用以下格式命名: <公司名称>。<组件名称>.RedistList.xml。 因此,例如,如果组件称为 Acme 创建的 DataWidgets,请使用 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>