65.9K
CodeProject 正在变化。 阅读更多。
Home

关于安装程序 - 自定义 Windows 和 Web 安装项目

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (32投票s)

2004年1月11日

5分钟阅读

viewsIcon

206839

downloadIcon

1320

本文将指导您如何为应用程序的特定需求自定义安装程序。

引言

部署是应用程序生命周期中不可或缺的一部分。用户对自定义和自主控制的应用程序的所有期望是,它应该易于部署和卸载,没有任何麻烦。本文主要关注如何自定义安装程序以满足应用程序的需求。通常,安装程序需要自定义才能在安装期间执行预处理/后处理。

Visual Studio 提供了创建安装程序的多种方法。您可以通过创建设置项目或 Web 设置项目来为 Windows 和 Web 应用程序创建安装程序。本文假设您需要使用 VS 设置项目来自定义安装程序。您将学习如何编写安装程序,根据需要使用不同的窗口进行自定义,将参数传递给自定义窗口,并根据检查执行提交/回滚。

安装程序类

为 Windows 或 Web 项目创建安装程序是一项相当简单的任务。您需要做的就是打开您想要为其创建安装项目的项目,从**文件 -> 添加项目 -> 新建项目**中添加一个设置和部署项目。您可以从模板窗口中选择相应的模板。以下代码片段基于 Web 设置项目进行描述。设置项目包含一些基于其需求的编辑器。**文件系统编辑器**是默认显示的编辑器,它提供了向设置添加文件的界面。有两种方法可以将文件添加到设置项目中。右键单击 Web 应用程序文件夹,会提供一个添加项目输出或文件的选项。选择项目输出,您将获得解决方案中所有项目的列表。选择相关项目,并添加**主要输出**和**内容文件**。向 Web 设置项目添加文件的第二种方法是选择 Web 项目中的每个文件,并将它们包含在与 Web 项目相同的目录结构中。

如果您想在安装期间编辑注册表,可以使用注册表编辑器在相应节点下添加注册表项。用户界面编辑器列出了安装的各个阶段以及在每个阶段显示的对话框。图 1 显示了用户界面编辑器。

图 1:用户界面编辑器

有趣的部分是在特定阶段的安装期间添加自定义对话框。右键单击“开始/进度/结束”节点,然后选择“添加对话框”选项。它会显示包含单选按钮/复选框/文本框的预定义窗口列表。虽然对这些控件的控制不多,但这些窗口允许禁用任何特定控件(`EditVisible` 属性)或提供默认值(`EditValue` 属性)。最重要的属性是 `EditNProperty`,可以使用它在需要时访问控件的值(例如 [EditNProperty])。您可以使用向上/向下移动选项更改安装期间窗口的出现顺序。

所有这些窗口都是预定义的,大多数时候,它们不能完全提供大多数应用程序所需的功能。例如,如果安装需要输入用户名/密码,则无法更改默认窗口以接受密码字符。对于这类需求,有另一种自定义安装的方法。这可以通过使用 `自定义操作编辑器` 来实现。自定义操作编辑器显示四个节点(安装/提交/回滚/卸载)。自定义操作可以是执行某些任务的任何操作,例如运行脚本、显示窗口或安装期间需要执行的任何配置。要添加自定义操作,请右键单击节点,选择添加自定义操作选项,然后选择任何 dll/exe 文件。要使选定的 dll/exe 作为自定义操作,我们需要像下面那样将其制作成安装程序。

[RunInstaller(true)]
public class WebInstaller : System.Configuration.Install.Installer {}

运行时根据 `RunInstaller` 属性(`System.ComponentModel`)识别一个类作为安装程序。您编写的安装程序类需要继承自 `System.configuration.Install` 命名空间中的 `Installer` 类。运行时在安装期间调用安装程序类的 `Install` 方法。此方法作为自定义操作的起点。要将参数传递给操作,需要使用自定义操作的 `CustomActionData` 属性设置所需的参数。下面一行显示了如何将虚拟目录路径和端口号传递给自定义操作。

Custom Action Data = /VDIR=[TARGETVDIR] /PORT=[TARGETPORT]   /// Note
            //: each parameter needs to separated by a space.

在自定义操作中访问参数:`Context.Parameters["VDir"] /// Context.Parameters` 是传递的参数集合。

如果自定义操作失败,请抛出 `InstallException` 实例。此异常将通知运行时回滚安装。

if (Context.Parameters["VDir"] == null)
{
    throw new InstallException("Virtual directory path not specified");
}

要提供自定义对话框,请将特定 EXE 添加为自定义操作。本文附带的代码有一个 exe 作为自定义操作。此 exe 显示一个提示输入用户名/密码的窗口,并尝试连接到 SQL Server。它还会使用用户输入准备的连接字符串更新 `web.config` 文件。它还包含一些很酷的代码,用于更新 IIS 以关闭当前虚拟目录的匿名选项。

使用代码

演示 zip 包含一个自定义安装程序。它通过创建虚拟目录来安装 Web 项目。安装完成后,它会询问信息以更新配置文件,并更新 IIS。

源代码 zip 包含 CustomInstall Web 项目、用于更新 IIS 的 IISInterface 项目、WebSetup 项目。

摘要

本文满足了如何自定义安装程序以显示更多窗口并实现预/后检查的基本需求。关键点是创建自定义操作、将数据传递给它们、在出错时中止安装。除此之外,本文还展示了如何以编程方式更新配置文件和 IIS 设置。

© . All rights reserved.