我认为在这里不会看到太多的争论,尤其是关于MSI的。我认为要记住的一件事是观察许多程序如何使用MSI文件。由于Windows Installer的设计方式非常弱,因此在使用MSI时显示UI对话框和进行复杂的配置选择是非常弱的,因此我已经注意到很多程序被拆分为一堆婴儿MSI,并通过父设置程序以最小的UI安装。SQL Server 2008设置向导就是这样。 UPS WorldShip也是如此。 Paint.NET也是如此 - 你看到的向导是一个Windows Forms应用程序,它启动 msiexec code>本身(您可以看到Windows Installer的最小UI弹出在白色向导窗口的顶部),通过属性参数将任何配置参数传递给 msiexec code>。
这种情况往往出现在某人被委任制作一个安装程序,而此程序既有服务器版本也有客户端版本。如果用户选择了服务器选项,则他们可能需要或者不需要安装一个新的数据库,这意味着需要安装 SQL Server。但是你不能在自己的安装程序进行中执行 SQL Server 的安装,因为Windows安装程序不允许你这样做。因此,一个常见的解决方案是编写一个应用程序,显示一个向导,允许用户配置所有的设置选项。然后,你的应用程序启动所需的 MSI 文件,包括 SQL Server、你的服务器应用程序和客户端应用程序,并将其设置为最小 UI 模式。基本上,完全摒弃 Windows 安装程序的“特性”方面,将其移至 MSI 级别。4.5 的多包安装似乎向这个方向更进了一步。如果你在安装过程中还需要将第三方的非 MSI 安装程序包括在内,例如为某个奇怪的 POS 打印机安装打印机驱动程序,那么这种格式也非常有用。
我也同意Windows Installer缺乏通用部署方案的内置支持。它的用途是为非XCOPY安装而设计的,但他们似乎忽视了一点,那就是安装通常不仅仅是“文件+快捷方式+注册表键”。没有内置的操作来设置IIS网站、注册证书、创建和更新数据库、将程序集添加到GAC等等。我想他们认为一些任务应该在第一次运行时发生,而不是作为安装的事务性部分。自由可得的工具和文档在过去十年中一直非常糟糕——非常糟糕。WiX项目和DTF(可以让您最终使用托管代码定制操作)基本上解决了这两个问题,这就是为什么我们非常感激Rob Mensching和其他人在那个项目上的工作。
我有同样的经历。安装过程会让你花费很多时间,因为你会陷入“哦天啊,我想我也必须变成这个专家。”的境地。我赞同这个想法,最好在项目早期就解决,并作为建设过程的一部分进行维护。这样,你可以避免开发出一个几乎无法卸载的产品的情况。(一段时间以来,Trac 就是一个这样的例子,它需要追踪具体版本的奇怪的 Python 库。)
我可以继续谈到Windows Installer有时决定使用我的慢速外部USB硬盘作为解压缩文件的地方,它似乎在那里无所作为,对于那些已经安装了大量MSI的计算机,进度条在单个安装期间重置自己数不清的次数是我见过的最愚蠢的事情,但我会把这些怒斥留到另一天。 =)
我可以继续谈到Windows Installer有时决定使用我的慢速外部USB硬盘作为解压缩文件的地方,它似乎在那里无所作为,对于那些已经安装了大量MSI的计算机,进度条在单个安装期间重置自己数不清的次数是我见过的最愚蠢的事情,但我会把这些怒斥留到另一天。 =)
我的两分意见;请注意,我真的只了解足以造成破坏的Windows Installer,但这是我来自小企业开发人员的评估,只是试图使用它。祝好运!