自 Windows XP 时代以来,Windows 安装程序(.msi 文件),包括 InstallShield 安装程序(这只是 MSI 的引导程序)已经占据了五次卸载应用程序所需的时间比其他安装程序更长。通常关于安装,确实如此。
为什么他们仍然需要这么长时间,为什么人们仍然使用 MSI 进行安装?例如:
卸载 VLC - 大约需要 5 秒钟。
卸载 XYZ - 启动“准备删除...”,随后延迟 15 秒。
它所做的只是删除文件和清理注册表(可能包括 COM 注册),那么为什么需要这么长时间?
答案1
Windows 安装程序首先系统地创建系统还原点,这是一个相当缓慢的操作。
文章标题也恰如其分地“Windows 安装程序太烂了”,摘录如下:
以前的安装包括执行一个程序并采取几个简单的步骤来安装软件,然后执行相反的卸载操作。
Windows Installer 的工作方式并非如此。它不是简单地运行程序进行安装,而是先检查系统状态,然后检查数据库(即程序的安装程序)的状态,然后进行一系列过于复杂的计算,以协调两者。
看起来,它不是运行安装脚本,而是解决旅行商问题。这就是它运行如此缓慢的原因。或者至少,这是我的印象。
我还补充一点,Windows 安装程序将所有信息保存在注册表中,这不是世界上最快的数据库。
答案2
Windows Installer 确实以速度慢而闻名。有几个因素导致了这一问题,我将在下面讨论它们。但最终,人们应该问问自己,在安装和卸载软件时,一分钟、两分钟或三分钟是否真的是一个争论的问题。我花的时间比翻看电视频道还要多 :)
注册表
这是罪魁祸首。Windows Installer 在其操作中大量使用注册表。随着系统的成熟、应用程序的安装和卸载以及注册表的大小增加或碎片化,MSI 将变得更慢。同一个应用程序在原始 Windows 安装上的安装和卸载速度要比在成熟的系统上快得多。这里的解决方案是尝试保持注册表清洁和碎片整理。
对于注册表清理,可以使用市面上众多工具之一。但对于注册表碎片整理,我强烈推荐恩特雷戈普特用于内部配置单元优化和页面碎片整理用于物理文件碎片整理。
MSI 操作在注册表上变慢的原因与 MSI 如何使用注册表有关。Windows Installer 使用注册表来跟踪哪些产品安装了哪些组件以及将其安装到哪个位置。原始安装 GUID 以压缩格式使用。有关安装的每台计算机信息可在 处找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18
,而每用户数据则位于其旁边的 下部HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\
和带有用户 SID 的键上。
这两个键都可能非常大,并且包含许多子键和值。它们控制每个已安装应用程序的产品、组件和 KeyPath。必须读取和处理所有这些信息才能正确卸载。但是,注册表格式按字母顺序列出键,这样可以进行二进制搜索。但值不是。它们在创建时就存储起来,因此必须执行线性搜索过程。这会降低算法性能。
总而言之,MSI 是一种相当完整和准确的软件安装和卸载方法。但它的缺点是注册表依赖性。系统非常出色。Windows 注册表早就应该彻底改造了 :)
欲了解更多高级信息:
有关 MSI 在每个安装或卸载过程中执行的操作的深入分析,请参阅本文解释了如何设置 MSI Debug。或者,对于较少但仍然有价值的信息,这个如何激活日志记录。
答案3
Windows安装程序对于企业部署有多大优势,其中的一些我在这里描述过:https://serverfault.com/a/274609/20599
大部分缓慢Windows 安装程序会话的回滚功能。首先,它创建一个还原点在安装或卸载之前(前提是系统还原尚未被禁用)。然后它将备份在卸载和安装过程中删除所有受影响的文件,以确保系统在发生错误时可以恢复到原始状态。
另一个因素是 MSI 中的所有组件都将在注册处注册.这涉及一些开销。
对于编译后的 MSI 文件,也需要一些时间提取安装文件。
请参阅此答案加速 MSI 安装的技术细节。
答案4
Windows 安装程序之所以如此广泛使用,原因有很多:操作系统集成、安全策略、无人值守安装等等。
我能想到的最常见原因是无人值守安装和网络分发。大型公司可以轻松分发应用程序,只需将 .MSI 文件放在网络驱动器上,然后只需在远程计算机上调用批处理文件(或分发向导应用程序)即可自动完成安装过程。
虽然 .MSI 文件之外还存在其他选项,但有一些与大多数 Windows 版本集成的独特功能这是许多其他安装程序所没有的。
请记住 - InstallShield 并不总是 MSI 文件的前端。他们还有自己的专有安装解决方案。