为 Visual Studio 2015 中的安装项目创建自定义对话框






4.91/5 (16投票s)
如何在安装项目中(也称为 vdproj)引入自定义对话框来生成 MSI 安装程序。
引言
Visual Studio 2015 支持旧式的 *.vdproj 项目来生成 MSI 安装文件。但是,与 WIX 和其他类似工具不同,它没有明显的方法来引入自定义对话框。本文将逐步解释如何做到这一点以及使用哪些工具。
这是一个高级主题,假设您已经在使用以前版本的 Visual Studio 的安装项目中进行过工作。
所需工具
为了创建安装项目,需要使用 Visual Studio 中的“扩展和更新”工具选项从 Microsoft 安装扩展。搜索“installer”一词以方便查找,然后下载并安装。
第二个必需的工具是 Orca,它包含在 Windows Platform SDK 中。Orca 是一个通用的工具,用于打开 Windows 基础结构使用的各种“数据库”文件。我尝试使用了 Windows Server 2003 SP1 Platform SDK,但我想它可能与其他 SDK 兼容。我使用的链接是: http://www.microsoft.com/en-us/download/details.aspx?id=6510
不需要安装整个 SDK,只需要安装如图所示的几个组件。
SDK 安装完成后,Orca 的安装文件 (Orca.msi) 通常可以找到在:C:\Program Files\Microsoft Platform SDK\Bin
作为替代方案,有一个名为 SuperOrca MSI Editor 的独立产品,来自 Pantaray Research Ltd.。其文档文件可能提供有关 MSI 内部的额外见解。
创建安装项目 (vdproj)
成功安装 Visual Studio 扩展并重新初始化 IDE 后,可以将安装项目添加到包含某个应用程序的现有解决方案中。在解决方案资源管理器中,可以像添加其他项目一样添加该项目,如图所示。
建议第一次使用向导选项,因为它会收集现有解决方案中项目的信息并填写所有必需的内容。
此时,我假设您将花费一些时间研究如何从其他解决方案项目添加文件并将它们组织到输出文件夹中。本主题超出了本文的范围。
创建自定义对话框文件
安装项目带有几个默认对话框,可以通过更改标签和设置控件的默认值来定制。给定对话框的现有控件不能被删除、重新定位,也不能添加更多控件。
用户界面视图显示了向导已包含的标准对话框,如图所示。
此时,我们将偏离正常工作流程,继续进行自定义。
标准对话框存储在扩展名为 *.wid 的二进制文件中,通常位于文件夹: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\VSI\bin\VsdDialogs\
,这是多个语言/代码页文件夹的根目录。本文将重点介绍 0
(中性) 和 1033
(英语) 子文件夹。
创建自定义对话框的第一步是选择另一个作为基础,并将其放在同一个文件夹中。本文选择的名称是 MyCustomDialog.wid
,从 VsdCustomText3Dlg.wid
复制而来。
编辑自定义对话框
WID 文件可以通过 Orca 工具打开,尽管在“打开”对话框中不建议使用该扩展。在 Windows Explorer 中打开 WID 文件会很有用,以便将其与应用程序关联。打开后,它将显示一个包含多行的表列表。
要解释 WID 文件是如何组织的以及如何编辑或添加更多控件,需要数千行。我建议并行打开多个 WID 文件以通过比较来学习。也可以将行从一个文件复制并粘贴到另一个文件中。
作为提示,在粘贴行后保留相同的对话框名称很重要,并且要注意控件的顺序,它们在某些列中通过名称链接。另外,编辑 ModuleDialog
表中的 DisplayName
列也很重要。
关于 MSI 内部(包括 WID)的良好文献可以在 Robin Fischer 的《Easy Msi》中找到。
在 Visual Studio 中使用
放在 0
和 1033
文件夹中的文件应该已经出现在 Visual Studio 添加新对话框的对话框中。将使用 DisplayName 而不是文件名。
如果 WID 文件成功加载,其属性将出现在属性窗口中,并且可以像其他标准对话框一样进行编辑。安装项目也应该可以顺利编译。
在构建引擎中使用
由于 Visual Studio IDE 通过在 VSDialogs\1033 文件夹(或其他文件夹,取决于区域设置)中引入新的 WID 文件进行了自定义,因此这种方法在构建引擎(如 Visual Studio Online)中将无法正常工作,因为构建引擎不包含从 vdproj
文件中引用的该文件。
虽然可以使用脚本将所需的 WID 文件安装到构建引擎中,但更简单的方法是将 WID 文件复制到安装项目文件夹,并**将其添加到源代码存储库**。为了确保文件在源代码存储库中,最好从 Web 界面浏览它。
之后,需要手动编辑 vdproj
以引用本地 WID 文件,而不是 VsDialogs 文件夹中的文件,方法是删除 <VsDialogsDir>
标记,如图所示。
如果修改后安装项目编译正确,它应该可以在构建引擎中工作。