21

我有一个使用 asp.net 3.5 开发的非常庞大的 Web 应用程序,我需要准备一个安装程序包,用于在 IIS 6 和 7 上部署应用程序。我对 Wix 和 Installsheild 2010(专业版)进行了大量研究在做出决定之前需要一些建议。我注意到 installsheild 在许可证方面是相当昂贵的,但对我来说,我有足够的预算,所以这不会成为问题。安装程序应该能够执行以下过程。

  • 部署已发布的 Web 资源(aspx 等)。

  • 创建虚拟目录。

  • 在 sql server 上创建数据库并运行一些初始化脚本。

  • 修改 XML 文件和 web.config 文件。

  • 设置允许写入虚拟目录中文件的权限。

我发现这两种技术都能够完成上述场景,但我想获得个人经验和建议。

4

4 回答 4

26

在创建了一个 Wix 安装程序来完成您想要做的事情之后,我很乐意推荐它。

在我看来,Wix 相对于 InstallShield 的优势:

  1. 由于 Wix 是免费的,您团队中的每个人都可以安装它,因此每个人都可以为安装程序做出贡献。如果一个开发人员在项目中添加了一个库,他们可以适当地更新安装程序,而无需等待“安装人员”完成他的工作。
  2. 在构建服务器上安装 Wix 没有任何问题,非常适合使用持续集成的环境。它与 MSBuild 完美集成(请参阅 Votive 项目)。
  3. Wix 安装程序是从文本文件构建的,因此非常容易进行版本控制。
  4. Wix 包括部署工具基础 (DTF),这使得使用 .Net 代码创建自定义操作变得非常容易。
  5. Wix 接近于金属:您通常可以将您对 Windows 安装程序的知识直接应用到 Wix。相反,学习 Wix 可以教会你很多关于 Windows Installer 的知识,这在为部署提供支持方面总是很好。

为了平衡这一点,需要注意以下几点:

  1. Wix 确实有一个陡峭的学习曲线。如果您还没有,请查看WiX 教程
  2. WiX 不是像 InstallShield 那样的“可视”环境——它通常都是文本和 xml。话虽如此,有编辑,免费商业
  3. 特别与 IIS 设置相关:Wix 3.0 仅适用于 IIS 6 元数据库 API。要在 IIS 7 上安装,您必须在目标服务器上启用Metabase Compatibility 功能。Wix 3.5 将全面支持 IIS 7 - 我已经尝试过这个测试版,到目前为止它似乎运行良好。
于 2010-07-01T09:05:06.937 回答
20

根据我使用 Wix 和 InstallShield 的经验,我建议您使用 InstallShield,除非您需要一个相当基本且直接的安装程序。我这样说是因为缺乏可用信息使巨大的 Wix 学习曲线变得更加困难

没有关于 Wix 的书籍,因此您的资源仅限于Wix 教程,该教程详细而冗长,但仍然没有涵盖超出基础知识的内容,以及您通过 Google 找到的博客文章。诚然,有很多很好的博客文章详细说明了如何完成特定的事情,但除非你没有截止日期,否则你可能无法一次坐好几天研究如何在 Wix 中完成特定的事情。就个人而言,我发现自己这样做太多,以至于 Wix 不是一个可行的解决方案(同样,除非你只需要一个简单的安装程序)

最终,在我的情况下,我们拥有使用 InstallShield 开发的现有安装程序,我们可以通过它更快地提高工作效率。InstallShield 也有自己的脚本语言,它也有很好的文档。

对我来说另一个很大的好处是 InstallShield 减轻了多个实例的痛苦(尝试搜索如何使用 Wix 执行此操作,您会明白我在说什么)和升级/修补。与在 Wix 中完成相比,我使用 InstallShield 能够在很短的时间内完成这两个(尤其是多个实例) 。

我的建议是根据您的时间限制/截止日期/承诺、安装程序的复杂性和产品的成熟度进行选择。Wix 需要对 InstallShield 提供的一种相当快速的操作方式进行大量研究。如果您拥有成熟的产品而不是相当年轻的产品,这可能会更加痛苦。

希望这可以帮助。

于 2010-07-02T14:26:55.127 回答
13

为了解决上面塞缪尔的观点......

  1. 我在 CodePlex 上创建了一个名为 IsWiX 的项目,用于解决民主化问题。您可以将它与 WiX 一起使用来创建合并模块,然后将合并模块与 InstallShield 一起使用,以获得两全其美的效果。这允许安装人员使用 InstallShield,而我的许多开发人员也可以使用 IsWiX/WiX。XML 仍然可以使用其他元数据进行标记,因此我们不受模块可以描述的限制。

  2. InstallShield 有一个独立的构建引擎,它与 MSBuild/TFS 集成并提供自动化接口。WiX 在这里没有优势。

  3. InstallShield 也是一个文本文件。它是一种更丑陋的 DTD 格式,但 IsWiX 通过从安装程序中很少更改的部分中抽象出频繁更改的部分来解决这个问题。

  4. 我强烈建议将 DTF 与 InstallShield 一起使用。毕竟 Type 1 Exported Function 与任何基于 MSI 的工具相同。

  5. InstallShield 有一个直接编辑器,可以显示基础表。这实际上更接近于金属,然后是使用基于 XSD 的 DSL 输出金属的 WiX。总而言之,WiXInstallShield 确实有很多优点,我将它们结合使用来创建极其复杂的安装程序。

PS-IsWiX 对散列和排序进行了大量思考,以解决分支合并问题。(我们在几十个分支上使用 Base Clearcase,所以这对我们来说非常重要。)

于 2010-07-01T20:25:01.217 回答
8

+1 塞缪尔的回答。至于陡峭的学习曲线......如果您不了解底层技术(Windows Installer)的工作方式,您将遇到安装支持的问题,无论是您选择的 InstallShield 还是 WiX。但 WiX 鼓励您学习 Windows Installer 以正确使用 WiX 抽象。

我个人使用 InstallShield 开始了我的设置项目(一个巨大的 Web 应用程序),但我最近搬到了 WiX,对此我很满意。我选择的关键点:

  • 这是免费的
  • 它是 XML(不再痛苦地区分和合并)
  • 它对 NAnt 很友好
  • 它完全按照你的指示去做(不多也不少)

希望这些信息对您有用。

于 2010-07-01T11:17:04.087 回答