windows-installer – 为什么Windows Installer一次只能安装一个程序?

我一直想知道为什么 Windows Installer一次只允许您安装一个程序.如果不能启动多个安装,尤其是在设置Windows的新安装时,这是非常令人沮丧的.这是什么原因?
当并发安装发生时,保证正确性是非常复杂的 – 假设它们共享一些文件.这需要某种形式的交易.

>您需要锁定文件
>如果安装失败,应该可以撤消中间更改(不确定,如果现在可以吗?)

这些概念在事务性数据库中是已知的 – 但主题并不简单,并且您通常在文件系统中找不到完全事务性的基础结构(即使日记文件系统提供了其中的一部分).一个问题是,多个锁可能导致死锁 – 然后您需要死锁检测(或两个安装程序将永远挂起),以及一种处理它的方法.可以避免死锁(例如,始终以相同的顺序锁定文件),但还有其他问题:

如果您预先锁定了所有必需的文件,则可以有效地获得所需的文件一个安装程序必须等到另一个安装程序完成.如果您未预先锁定所有必需的文件,并继续运行,则可能会导致“事务”失败.这意味着,必须重新启动其中一个安装程序.

然后你可能不得不考虑事务隔离级别 – 完全正确,你的事务必须是“serializable” – 但这并不容易,即使对于许多数据库也是如此.

甚至可能存在处理问题的替代策略,这避免了完全隔离,但通常更难以证明其正确性.

我相信,在并发安装的情况下,我们会遇到更多棘手的安装后问题 – 特别是因为我不认为,操作系统供应商(或分销商)会经历所有麻烦以使其100%清洁.所以我宁愿不使用它,即使它是由操作系统提供的.

注意

但也许你真正想要的甚至不是“同时”安装.也许这就足够了,如果你可以排队安装,然后一个一个地执行(理想情况下没有问任何问题).这真的是一些东西,其他一些OS(发行版)处理得更好.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...