Windows为什么不允许您一次卸载或删除多个程序?这背后的原因是什么?会搞乱内部系统吗?
我不是在寻找如何一次卸载多个程序,我只是在寻找为什么它不是一个选择的原因。
apt-get -y uninstall prog1 prog2 prog3
。
Windows为什么不允许您一次卸载或删除多个程序?这背后的原因是什么?会搞乱内部系统吗?
我不是在寻找如何一次卸载多个程序,我只是在寻找为什么它不是一个选择的原因。
apt-get -y uninstall prog1 prog2 prog3
。
Answers:
如果您了解Windows安装程序系统的工作原理,那么很明显,他们将事务数据库中的一些想法应用到了程序的安装和维护中,更不用说.msi
文件本身就是数据库了。
设计任何数据库时始终存在问题-您想要速度还是准确性/安全性?鉴于安装人员可以修改系统配置,并且事故可能会使系统无法运行,因此安全性已被赋予优先于速度的要求。.msi
安装程序之所以如此缓慢的原因之一是,为每个文件等创建了回滚文件,这些文件将被修改,然后被删除-允许在发生中间错误的情况下“回滚”任何更改(例如停电或系统崩溃)。
现在,我相信MSI引擎本身一次只能强制安装,修改或删除一个程序- .msi
例如,如果您尝试在卸载另一个程序时运行,例如,它可能无法运行或将等待当前正在运行的卸载完成。非MSI安装程序可能不会以这种方式运行-因为它们不使用MSI引擎。但是由于这个安全设计决定,这可能就是为什么appwiz.cpl
坚持只让一个卸载程序被立即调用的原因。
CCleaner允许您启动卸载程序,而无需等待先前运行的卸载程序完成。由于上述原因,MSI安装程序仍可能无法并行工作。
这仅真正适用于使用Windows Installer系统的程序。
如果某个程序使用其自己的(卸载)安装程序系统,则没有什么可以阻止您同时运行另一个卸载程序。
Windows Installer限制了实例数量,以避免多个程序在更改系统范围(通常为共享)的设置和文件时发生冲突。
大多数卸载程序会跟踪他们所做的更改,以便在出现故障时可以成功回滚。如果一个人不知道(由其他卸载程序进行的)所有更改,则如果它尝试回滚失败的安装,则实际上可能会使情况变得更糟。
创建Windows Installer系统的目的是成为一个统一的系统,供所有应用程序开发人员使用(在Windows上),以帮助避免此类问题。
卸载任务经常修改由多个程序共享的文件,或系统文件\注册表(需要管理才能这样做的部分原因)。如果同时运行多个卸载任务,则它们可能会发生冲突。如果您曾经遇到过“ DLL Hell”,那就一样。其他程序或Windows本身可能处于不一致状态。
同时卸载程序,除了有其他潜在的问题外,几乎没有好处:不会比顺序卸载程序快得多。取消安装程序是一项涉及磁盘IO的任务。运行多个执行IO的程序并不比顺序运行它们快(除非将程序安装在两个单独的物理磁盘上)。实际上,它可能会变慢,因为两个相互竞争的IO任务将使磁盘缓存效率降低,并且磁盘的物理磁头将不得不从一个地方跳到另一个地方。