自定义 Windows Installer 包
使用 Visual Studio 中的部署工具,可以控制安装期间显示给用户的用户界面 (UI)。 可以自定义安装用户界面,以便将信息显示给用户或从用户那里收集信息。
通过使用合并模块和自定义操作,还可以对安装程序包进行自定义。 合并模块可以传递共享组件,自定义操作在安装结束时将运行代码,以执行安装期间无法处理的操作。
安装用户界面
**“用户界面编辑器”用于指定和自定义将显示的对话框。 每个用户界面对话框均表示在安装过程中显示的“安装向导”**中的单独一页。
**“用户界面编辑器”中提供了许多预定义对话框来处理常见方案,例如,介绍向导用途的“欢迎使用”对话框、允许用户指定安装目录的“安装文件夹”对话框或显示安装进度的“进度”**对话框。 另外,还有几个自定义对话框使您可以使用复选框、选项按钮和文本框来显示选项或收集信息。 有关更多信息,请参见如何:在用户界面编辑器中添加和移除安装对话框。
提示
Visual Studio 安装和部署项目不支持自定义对话框或您自己生成的其他用户界面元素。 请参见:安装对话框限制。
每个用户界面对话框都有可以用于控制其外观的属性。 自定义对话框包括可在安装过程中进行计算以使用条件来改变安装的属性。 有关更多信息,请参见“用户界面编辑器”的属性。
合并模块
合并模块包含 .dll 这样的组件以及任何相关的文件、资源、注册表项和安装逻辑。 无法直接安装合并模块。 不过,可以将模块合并到安装程序中以便为应用程序提供该组件的功能。
合并模块建议
合并模块可能很难进行维护和更新。 将合并模块包括在其安装项目内的开发人员如果不与合并模块的所有者进行交互操作,则无法将修复程序传递给合并模块。 此外,合并模块的所有者不能向最终用户计算机直接发送更新。
或者,也可以考虑为作为可以链接到安装程序的 Windows Installer 来提供技术。 有关更多信息,请参见应用程序部署必备。
可重定目标的合并模块
默认情况下,合并模块中的文件安装到由合并模块的所有者指定的文件夹位置。 某些情况下,您可能需要允许合并模块的使用者决定文件的安装位置。 例如,如果合并模块中的程序集由多个应用程序使用,则合并模块的使用者可以选择在全局程序集缓存中安装程序集;否则,使用者可以选择将此程序集安装在应用程序目录中。
若要允许合并模块的使用者将某个文件的目标指定为其他位置,请将该文件置于**“文件系统编辑器”的“Module Retargetable”**文件夹中。 如果将生成的合并模块添加到其他部署项目中,该项目的作者可通过设置由合并模块公开的 Module Retargetable Folder 属性选择一个位置。 **“Module Retargetable Folder”属性是一个动态属性。 当在“解决方案资源管理器”中选定了合并模块的情况下,此属性将出现在“属性”窗口中“KeyOutput”节点下面的“(MergeModuleProperties)”**节点下。
提示
如果在“文件系统编辑器”中更改“Module Retargetable”文件夹的名称,则此属性的名称也会更改。 在生成合并模块之前,此属性不会出现在“属性”窗口中。
自定义操作
自定义操作将在安装结束时运行 .dll、.exe 或程序集这样的代码,以执行安装期间无法处理的操作。 例如,如果您在安装期间需要在目标计算机上创建一个本地数据库,则创建一个用于创建和配置此数据库的可执行文件,然后将该可执行文件作为一个自定义操作添加到部署项目中。 有关更多信息,请参见演练:安装时使用自定义操作创建数据库。
可以使用 Visual Studio 中的**“自定义操作编辑器”**在部署项目中添加自定义操作并设置其属性。 部署项目可以包含多个自定义操作。 有关更多信息,请参见如何:在自定义操作编辑器中添加和移除自定义操作。
自定义操作在安装完成之后运行,因此它们无法访问用于控制安装的属性。 如果需要将信息从安装程序传递到自定义操作,可以通过设置 CustomActionData 属性来实现此目的。 有关更多信息,请参见演练:安装时使用自定义操作显示消息。
警告
如果自定义操作失败,整个安装将回滚。
另外,可以使用 Condition 属性对任何自定义操作设置条件。 这使您得以在安装过程中基于目标计算机上的条件运行不同的自定义操作。 例如,可能希望根据目标计算机上的操作系统版本运行不同的自定义操作。 有关更多信息,请参见Condition 属性。
自定义操作建议
可以使用自定义操作来创建使用灵活的安装程序包,但各种各样的最终用户计算机和配置可能会引发问题。 您应开发可实现 Install、Uninstall、Rollback 和 Commit 方法的自定义操作。 此外,确保自定义操作可以支持以下方案:修复、缓解、产品升级、产品降级、OS 升级、OS 降级、维护/修补和引用计数。
有关自定义操作准则的更多信息,请参见 Tao of the Windows Installer, Part 2(Windows Installer 的玄妙,第二部分)中的第 25 条规则。
条件部署
Visual Studio 部署中最有价值的功能之一是具备设置安装条件的能力,这使您可以自定义如何安装应用程序。 通过使用条件部署,可以根据操作系统版本安装不同的文件,或根据现有项的值自定义注册表设置,甚至可以在目标计算机上尚未安装依赖应用程序时暂停安装。
Visual Studio 中的部署工具以两种方式支持条件部署:通过启动条件和通过**“Condition”**属性。
启动条件
启动条件用于计算目标计算机上的条件,如果不符合条件,则暂停安装。 可以设置启动条件来检查操作系统版本、文件是否存在、注册表值、Window Installer 组件、公共语言运行时和 Internet Information Services。 启动条件在**“启动条件编辑器”**中指定。 有关更多信息,请参见在部署中启动条件管理。
Condition 属性
文件、文件夹、注册表项、自定义操作或启动条件的 Condition 属性用于计算 Windows Installer 公开的属性或安装程序中的其他元素设置的属性。 启动条件的自定义属性可以在“启动条件编辑器”中指定,自定义文件夹的自定义属性可以在**“文件系统编辑器”中指定,而自定义对话框的自定义属性可以在“用户界面编辑器”**中指定。 指定自定义属性时,名称必须包含大写字符,且一定不能和任何现有属性名或 Windows Installer 属性名冲突。
条件可以计算由安装程序中其他元素公开的 Property 属性(例如用于文件搜索的 Property 属性),也可以计算由 Windows Installer 公开的属性(如操作系统版本)。
有关更多信息,请参见Condition 属性。
条件的布尔运算
可以使用 Boolean 运算符计算多个属性。 有关更多信息,请参见 Windows Installer 条件语句语法。