如何使用 Visual Studio 2010 中的 Web 设置项目创建自定义对话框






4.81/5 (21投票s)
分步指南,介绍如何创建自定义对话框并将其添加到 Web Setup Projects。
引言
对于大多数软件来说,开发过程在解决方案的部署(无论是网站还是桌面解决方案)之前都不能算完成。部署软件的方式有很多种。例如,在部署网站时,你可以使用 Visual Studio 的 Web Deploy 选项发布网站,或者创建 Web Setup Project(Scott Gu 的博客上有关于创建 Web Setup Project 的优秀文章:http://weblogs.asp.net/scottgu/archive/2007/06/15/tip-trick-creating-packaged-asp-net-setup-programs-with-vs-2005.aspx),或者你甚至可以简单地将整个网站复制并粘贴到服务器上,然后手动完成所有配置。
如果你正在使用 VS Web Setup Project,很有可能你需要执行一些额外的任务,这些任务可能需要你为软件添加一些自定义逻辑来启动某种服务或为应用程序设置连接字符串。为此,你可能需要从用户那里获取一些额外的输入,这些输入可以通过使用 VS Web Setup Projects 中提供的对话框来获得。这些是一组预定义的对话框模板,可以根据我们的需求进行设置。但也有一些限制,列在下面:
- 你不能组合使用预定义的控件,例如,你可能想使用一个复选框、两个文本框和一个单选按钮。在这种情况下,你不能使用预定义的对话框。
- 你对对话框中的控件完全没有访问权限;例如,你可能希望有一个表单,用户可以选择“Windows 身份验证”选项,而你想隐藏为 SQL Server 身份验证提供的用户名和密码字段。这在使用预定义的对话框时无法实现。
- 为了将对话框中的变量传递给自定义操作,你将不得不进行繁琐的工作,你实际上想在其中使用表单中提供的值。例如,你将不得不为你的自定义操作数据从用户界面添加如下内容,并在自定义操作中使用上下文来获取值,这有时会令人困惑。
/targetdir="[TARGETDIR]\" /targetvdir="[TARGETVDIR]" /targetsite="[TARGETSITE]"
有时,你可能想超越设置中提供的功能,并对你想要在设置过程中执行的操作的流程和执行进行一些控制。好消息是,你可以简单地使用你自己创建的 Windows Form,并让它在设置过程中执行。这是实现对自定义操作完全控制的好方法。
现在我将分步介绍如何创建自定义对话框并将其添加到 Web Setup Projects。
创建网站
- 打开 Visual Studio,然后点击“文件”->“新建”->“项目”,在已安装的模板部分,选择“Web”,然后选择你想要用于网站的模板。在本例中,我使用的是 ASP.NET Web 应用程序。
- 在默认页面中,我将标准的“欢迎使用 ASP.NET!”文本更改为“欢迎使用 ASP.NET”,以确保这是我们的页面。
为我们的自定义对话框创建 Windows Form
- 在解决方案资源管理器中右键单击解决方案,然后在“添加”菜单中点击“新建项目”子菜单项。
- 在“Windows”已安装模板中,选择“Windows Forms 应用程序”。在项目的“名称”字段中输入“Custom Window”。
- 在设计器中将显示一个空白的 Windows Form。根据你的需求设计窗口。我在下面添加了一些控件,但在实际设置中,你会尽量使屏幕接近设置步骤。
使用此表单,你可以完全控制表单上的所有对象,并随心所欲。
创建自定义操作类库
- 在解决方案资源管理器中右键单击解决方案,然后在“添加”菜单中点击“新建项目”子菜单项。
- 从 Visual C# 已安装的模板中选择“类库”。这将是我们的自定义操作,我们将从中调用对话框的 `showDialog()` 函数。
- 删除类名 Class1.cs。
- 在命名空间中添加 `System.ComponentModel`、`System.Windows.Forms` 和 `System.Configuration.Install`。
- 在类上添加 `[RunInstaller(true)]` 属性。
- 添加一个名为 CustomAction.cs 的新类,并使其继承自 `System.Configuration.Install.Installer`。你必须为项目添加对 `System.Configuration.Install` 组件的引用。
- 你现在将覆盖 `Installer` 类的 `Install` 函数。
- 你可以在已安装模板的“常规”类别中添加 Installer 类,从而跳过 9-11 步。
- 在 CustomAction 项目中添加对 CustomWindow 项目的引用。
- 在重写的方法中添加以下代码行:
创建 Web Setup Project
- 现在我们将添加 Web Setup Project。为此,请在解决方案资源管理器中右键单击解决方案,然后在“添加”菜单中点击“新建项目”子菜单项。
- 在“已安装模板”窗格中展开“其他项目类型”节点。在“设置和部署”节点下,点击“Visual Studio Installer”,然后从模板窗格中选择“Web Setup Project”。在“名称”字段中输入“MyInstaller”,然后点击“确定”。
- 项目创建后,在解决方案资源管理器中右键单击“MyInstaller”项目,然后在“添加”菜单中点击“项目输出”。
- 将显示“添加项目输出组”窗口。从“项目”下拉列表中选择“MySite”,然后选择“主要输出”和“内容文件”,然后按“确定”。
- 同样,将 CustomAction 项目的主要输出添加到 MyInstaller 项目中。
- 来自 MySite 项目和 CustomAction 的输出将添加到安装程序中。见下图。
- 要添加用于显示我们对话框的自定义操作,请右键单击“MyInstaller”项目,然后在“视图”菜单中点击“自定义操作”。
- 将打开“客户操作”选项卡。
- 右键单击“CustomActions”下的“Install”文件夹,然后点击“添加自定义操作…”
- 将打开一个对话框,在“Web 应用程序文件夹”中,选择“来自 CustomAction 的主要输出”,然后点击“确定”。
- 这样就完成了,呼。构建解决方案,我们的设置将在我们项目的 Debug 或 Release 文件夹中创建,具体取决于我们的配置。
运行设置
现在我们将运行刚刚创建的设置。只需双击 Setup.exe,我们的设置就会开始。
点击“下一步”以获取 Web 配置选项。
点击“下一步”以确认安装,然后点击“下一步”开始设置。
你将看到添加的自定义操作对话框。
当你在执行完操作后点击“下一步”并关闭对话框后,控制权将交还给安装程序,它将完成安装。
点击“关闭”以完成安装。
将上下文传递给自定义对话框
在某些情况下,你可能希望将上下文传递给你的自定义对话框,并使用上下文变量。你可以为 `Install` 创建一个类成员,并为接受 `InstallContext` 对象并将其分配给我们的 `formContext` 对象的表单类创建一个构造函数。
在自定义操作中创建对话框实例时,将其作为构造函数的唯一参数传递。
结论
通过使用此技术,你可以在运行设置时获得自定义功能,并完全控制自定义逻辑的执行。