为什么有时在安装新软件后需要重新启动计算机,而在其他时候却不需要?
是否有任何原因为什么需要重新启动,或者为什么它不总是一种或另一种方式?
为什么有时在安装新软件后需要重新启动计算机,而在其他时候却不需要?
是否有任何原因为什么需要重新启动,或者为什么它不总是一种或另一种方式?
Answers:
这取决于。
如果要安装的软件影响操作系统的组成部分,则需要重新启动。例如,操作系统的新内核。
在Windows系统上,经常使用它,因为认为用户太愚蠢以致无法正确使用计算机。作为示例,Microsoft 在其网站上发布了有关如何更改用于联网的“节点类型”的详细信息,其中包括在仅需要重新启动网络服务时“重新启动计算机”的说明,如此处所述。因为我们(由于用户太傻而无法重新启动服务),所以我们被告知重新启动所有内容。
对于某些软件,我得出的结论是,这是一种习惯,即使被告知这样做也是不必要的。如果我不认为某个软件应该对操作系统做任何重要的事情,那么我往往不会打扰,也不会遇到任何问题(如果有问题,它们很容易解决)。
有时,某些软件会做出更改,而这些更改在使用计算机时无法生效。某些原因可能是-文件正在使用中,更改只能在计算机启动期间发生,可能存在安全问题,该问题只能在计算机激活网络之前完成,可能是病毒扫描程序会干扰计算机的运行。安装。
有时,这只是开发人员的草率编程。
我敢肯定还有更多。
通常,在安装新软件时,需要将许多其他软件包使用的dll(文件)升级到新版本。(在升级已经安装的应用程序时,更可能是这种情况。)
如果正在运行的应用程序正在使用该dll,则它将一部分加载到内存中,其余的将在需要时从磁盘读取。因此,dll将被锁定在磁盘上。(如果未锁定,请考虑问题!)
锁定的DLL无法更新,因此安装程序将在下次计算机重新启动时要求Windows用新版本替换DLL。因此,需要重新启动。
一些更好的安装程序会告诉您在运行安装程序之前应关闭的应用程序,因此无需重新启动即可更新DLL。 但是,这会使安装程序的UI更加复杂,并导致更多的支持电话。
应用程序的安装程序还可以使应用程序保存其状态,关闭其自身关闭状态,然后在DLL更新后重新启动。仅当DLL由单个应用程序使用时,才可以这样做。大多数自我更新应用程序都这样做-当用户很多时,这应该成为大众市场应用程序的规范。
以上所有内容都可能导致难以测试的复杂逻辑。测试安装程序会花费很长时间,因为您需要尝试猜测用户计算机可能处于的每种状态。因此,最好使安装程序简单易行并始终运行,即使这会导致用户重新启动几次。
由于安装程序重新启动,用户决定购买其他应用程序的情况并不常见,因此供应商会花费时间(金钱)来研究购买用户应用程序所需的东西。
在安装重新启动后自行整理的应用程序后,您多久遇到一次问题?想想许多用户打电话来解决问题的支持成本,而这些问题只是通过重启即可解决。作为开发人员,即使在您认为不需要软件之后,也总是总是让用户在安装软件后进行重新引导,这很容易引起他们的注意。
大多数操作系统和软件都是在磁盘空间和内存花费大量资金的时代编写的。现在,应用程序有了一个使用它们所有dll的私有副本的举措,因此可以升级橡皮擦,但使用更多的存储空间。
在服务器上,这是通过“容器”完成的,但是“容器”不适用于桌面软件,因为您希望能够使用另一个应用程序访问由一个应用程序保存的数据。(否则,请使用iPhone。)
原因是因为如果不这样做,将会崩溃。来自雷蒙德·陈(Raymond Chen):
即使您替换了正在使用的文件,系统中仍然可能存在想要使用旧版本的代码。例如,假设您有两个文件可以一起工作:
- dll文件
- B.dll
您发布了一个更新两个文件的补丁程序,但该补丁程序
A.dll
正在使用中。没问题。您只需将它们都替换。结果,仍在使用的程序A.dll
继续使用旧版本,而新程序将使用新版本。并且所有程序都获得的新版本B.dll
。现在,使用
A.dll
旧版本的程序决定调用函数。它自然希望使用的旧版本B.dll
,但会获取新版本。根据您所做的更改B.dll
,此调用可能会起作用,也可能会崩溃。两个DLL均假定其伙伴来自相同的匹配集。
坦白说,假设更新总是会导致重启,那么软件开发人员的工作量就会减少(因此也就减少了$$)。这可能是bean计数器和开发人员共同决定的。
最终,在理想情况下,很少有更新不能在不重启的情况下完成,但是需要大量的预先计划,并且由于系统可能具有多种可能的配置,因此存在一定的风险。
这与以下事实有关:在运行代码时很难更改代码而又不会引起一些重大问题。解决方案:在更改代码之前停止所有操作,这样就可以确保没有任何运行。这是一种蛮力破解,在很多时候它本来是不需要的,但它绝对是必要的,尤其是当您正要更新特别重要的代码时。实际上,有整个公司专门从事不需要重新启动此特别重要代码的更新。他们的操作方式在本文http://www.ksplice.com/paper中。