添加自定义系统必备

更新:2007 年 11 月

“引导程序”是一般安装程序,可配置为引导几乎所有打包为 Windows Installer 文件或可执行程序的可再发行组件。它通过一组简单的 XML 清单进行编程,该清单指定引导程序管理组件安装所需的所有元数据。引导程序不规定应用程序必须使用何种安装程序技术(Windows Installer 或 ClickOnce)。

当用户启动 Setup.exe 时,它首先检测是否已安装所有系统必备。如果缺少某个系统必备,则引导程序会显示一个安装对话框,列出缺少的组件并显示其许可协议。否则,如果检测到所有的系统必备,引导程序则只需启动应用程序的安装程序。

用户接受许可协议后就会开始下载和安装过程。安装完所有的系统必备后,引导程序将关闭应用程序自身的安装过程。

创建自定义程序包

有些情况下,您不必为可再发行组件创建程序包。通常,您只需要为共享组件或系统组件生成程序包,这包括将文件安装到 GAC 中、执行全局注册或组成 Windows Service。

您应询问控件提供者是否可以在应用程序中附带可再发行文件。如果简单的复制操作即足以重新发布系统必备组件(例如,如果它没有任何依赖项),则不必创建程序包,而只需确保该文件包括在安装程序中,或设置为“复制本地”(“属性视图”中文件的 Copy 属性设置为 True)。

您还应确定是否必须使用安装程序。如果是,请使用引导程序程序包。

若要创建新的组件程序包,您必须提供:

  • EXE 或 MSI 文件形式的可再发行组件。

  • 产品清单 product.xml,包含程序包的所有非特定语言的元数据。它包含可再发行组件的所有本地化版本通用的元数据。

  • 程序包清单 package.xml,包含特定语言的元数据;它通常包含本地化的错误消息。必须至少为组件的每个本地化版本提供一个程序包清单。

您必须手动创建清单文件,清单文件包含的元数据必须遵循 Windows 软件开发工具包 (SDK) 中的“程序包架构元素”描述的特定架构。有关架构参考的信息,请参见 产品和包架构引用。Visual Studio 集成的安装程序生成器会在生成时验证清单文件。

可使用 DependsOnProduct 架构元素在这些清单中指定程序包之间的依赖关系。

然后您必须将产品和程序包清单文件与可再发行文件一起复制到 Visual Studio 为可再发行组件包保留的特定文件夹中:

\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages

若要编写将可再发行组件及其清单复制到此文件夹的安装程序,可以通过编程方式从以下注册表项的“路径”值中确定 Bootstrapper 文件夹的位置:

HKLM\Software\Microsoft\GenericBootstrapper\3.5

每个可再发行组件均位于程序包目录下它们自己的子文件夹中。产品清单和可再发行文件随后将放入此子文件夹中。组件的本地化版本以及程序包清单放置在根据“区域性名称”(请参见 CultureInfo 中的表)命名的子文件夹中。

这些文件一旦复制到 Bootstrapper 文件夹中,它们将自动出现在 Visual Studio 的“系统必备”对话框中,以便开发人员通过选中复选框对它们进行选择。

有关使用引导程序配置安装的更多信息,请参见 MSDN 文章 Use the Visual Studio 2005 Bootstrapper to Kick-Start Your Installation(使用 Visual Studio 2005 引导程序开始安装)。

使引导程序程序包可再发行组件与应用程序安装保持分离

通常,应使引导程序程序包可再发行组件中的所有组件与使用这些组件的应用程序分开。例如,假设您有一个包含组件 Acme.DataWidgets.dll 的名为 Acme.DataWidgets.msi 的引导程序程序包。Acme.DataWidgets.dll 在开发时不应出现在项目的 bindir 目录中,并且不应部署到应用程序的安装程序程序包中。

因此,建议您将引导程序组件安装到开发计算机上的 GAC 中,并且最好使用同一核心引导程序程序包可再发行组件安装程序。这可防止在开发时将引导程序组件复制到项目的 bindir 目录中。另外,建议您定义一个 RedistList 文件来描述引导程序可再发行组件包中包含的所有程序集。这可防止在任何应用程序部署项目中包含引导程序组件。RedistList 文件只能安装在开发人员的计算机上。

若要达到这一目的,请在 .NET Framework 目录 (\WINDOWS\Microsoft.NET\Framework) 的 RedistList 文件夹中创建一个可再发行组件列表。

可再发行组件列表是一个应使用如下格式命名的 XML 文件:company_name + component_name + 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>

向“系统必备”对话框添加程序包

“系统必备”对话框使您可选择应用程序在安装前所需的组件。Visual Studio 包含若干个标准的系统必备。但是,您可以添加其他 Microsoft 组件或第三方组件作为系统必备。为此,您必须按上文所述创作产品和程序包清单。

在“系统必备”对话框中,“请选择要安装的系统必备组件”列表显示可安装的系统必备程序包。此列表中程序包的顺序取决于清单中指定的依赖关系,并指定程序包的安装顺序。

向引导程序中添加一般程序包后,它会作为“MyPackage”出现在“系统必备”对话框中。Visual Studio 不会自动选择要安装的程序包。

对于 ClickOnce 项目,Visual Studio 建议通过在“请选择要安装的系统必备组件”中默认选中“.NET Framework”复选框为所有项目类型提供 .NET Framework。

默认情况下,对于 Windows Installer 项目,如果当前项目为安装项目或 Web 安装项目,“.NET Framework”复选框将处于选中状态。如果在生成时既没有选择 .NET Framework,也没有选择 Windows Installer 程序包,则会发出生成警告。

请参见

任务

如何:与 ClickOnce 应用程序一起安装系统必备组件

概念

部署系统必备 (Visual Studio)

参考

“系统必备”对话框

产品和包架构引用

其他资源

https://msdn.microsoft.com/msdnmag/issues/04/10/bootstrapper/