为什么在安装新软件后需要重新启动计算机?


38

为什么有时在安装新软件后需要重新启动计算机,而在其他时候却不需要?

是否有任何原因为什么需要重新启动,或者为什么它不总是一种或另一种方式?


2
基本上是更新注册表
Dwayne Samuels

4
在某些情况下,您可以重新启动服务而不是重新启动。
ccook 2010年


8
@dwayne大多数问题与锁定文件(dll)有关,而不与注册表有关。该注册表用于告诉Windows重新启动时要替换的文件,但这不是需要重新启动的原因。
伊恩·林罗斯

Answers:


38

这取决于。

如果要安装的软件影响操作系统的组成部分,则需要重新启动。例如,操作系统的新内核。

在Windows系统上,经常使用它,因为认为用户太愚蠢以致无法正确使用计算机。作为示例,Microsoft 在其网站上发布了有关如何更改用于联网的“节点类型”的详细信息,其中包括在仅需要重新启动网络服务时“重新启动计算机”的说明,如此处所述。因为我们(由于用户太傻而无法重新启动服务),所以我们被告知重新启动所有内容。

对于某些软件,我得出的结论是,这是一种习惯,即使被告知这样做也是不必要的。如果我不认为某个软件应该对操作系统做任何重要的事情,那么我往往不会打扰,也不会遇到任何问题(如果有问题,它们很容易解决)。


6
我同意。如今,除非他们更新关键的系统文件或驱动程序,否则没有必要重新启动系统。通常是开发人员想要确保他们“涵盖所有基础”。
surfasb

1
如果安装程序较旧,则可能只要求重启即可。如果是天真的开发人员,则可以将其设置为提示重新启动,而不管是否需要重新启动。能够正确利用MSI功能的较新的安装程序实际上能够报告哪些应用程序在打开所需文件(dll等),并提示用户停止它们-仅当他们选择让应用程序运行时,它们才会被提示重新启动。这几乎是一个草率的混乱,没有什么可以迫使开发人员使用MSI,更不用说正确使用它了。
Stephanie

15

有时,某些软件会做出更改,而这些更改在使用计算机时无法生效。某些原因可能是-文件正在使用中,更改只能在计算机启动期间发生,可能存在安全问题,该问题只能在计算机激活网络之前完成,可能是病毒扫描程序会干扰计算机的运行。安装。

有时,这只是开发人员的草率编程。

我敢肯定还有更多。


1
特别是,在使用计算机时哪些更改无法生效?
Anderson Green

13

通常,在安装新软件时,需要将许多其他软件包使用的dll(文件)升级到新版本。(在升级已经安装的应用程序时,更可能是这种情况。)

如果正在运行的应用程序正在使用该dll,则它将一部分加载到内存中,其余的将在需要时从磁盘读取。因此,dll将被锁定在磁盘上。(如果未锁定,请考虑问题!)

锁定的DLL无法更新,因此安装程序将在下次计算机重新启动时要求Windows用新版本替换DLL。因此,需要重新启动。

一些更好的安装程序会告诉您在运行安装程序之前应关闭的应用程序,因此无需重新启动即可更新DLL。 但是,这会使安装程序的UI更加复杂,并导致更多的支持电话。

应用程序的安装程序还可以使应用程序保存其状态,关闭其自身关闭状态,然后在DLL更新后重新启动。仅当DLL由单个应用程序使用时,才可以这样做。大多数自我更新应用程序都这样做-当用户很多时,这应该成为大众市场应用程序的规范。

以上所有内容都可能导致难以测试的复杂逻辑。测试安装程序会花费很长时间,因为您需要尝试猜测用户计算机可能处于的每种状态。因此,最好使安装程序简单易行并始终运行,即使这会导致用户重新启动几次。

由于安装程序重新启动,用户决定购买其他应用程序的情况并不常见,因此供应商会花费时间(金钱)来研究购买用户应用程序所需的东西。

在安装重新启动后自行整理的应用程序后,您多久遇到一次问题?想想许多用户打电话来解决问题的支持成本,而这些问题只是通过重启即可解决。作为开发人员,即使在您认为不需要软件之后,也总是总是让用户在安装软件后进行重新引导,这很容易引起他们的注意。

----------

大多数操作系统和软件都是在磁盘空间和内存花费大量资金的时代编写的。现在,应用程序有了一个使用它们所有dll的私有副本的举措,因此可以升级橡皮擦,但使用更多的存储空间。

在服务器上,这是通过“容器”完成的,但是“容器”不适用于桌面软件,因为您希望能够使用另一个应用程序访问由一个应用程序保存的数据。(否则,请使用iPhone。)


7

原因是因为如果不这样做,将会崩溃。来自雷蒙德·陈Raymond Chen)

即使您替换了正在使用的文件,系统中仍然可能存在想要使用旧版本的代码。例如,假设您有两个文件可以一起工作:

  • dll文件
  • B.dll

您发布了一个更新两个文件的补丁程序,但该补丁程序A.dll正在使用中。没问题。您只需将它们都替换。结果,仍在使用的程序A.dll继续使用旧版本,而新程序将使用新版本。并且所有程序都获得的新版本B.dll

现在,使用A.dll旧版本的程序决定调用函数。它自然希望使用的旧版本B.dll,但会获取新版本。根据您所做的更改B.dll,此调用可能会起作用,也可能会崩溃。两个DLL均假定其伙伴来自相同的匹配集。


您所描述的内容有很多方法,但是它们需要思考。
Daniel R Hicks

2

坦白说,假设更新总是会导致重启,那么软件开发人员的工作量就会减少(因此也就减少了$$)。这可能是bean计数器和开发人员共同决定的。

最终,在理想情况下,很少有更新不能在不重启的情况下完成,但是需要大量的预先计划,并且由于系统可能具有多种可能的配置,因此存在一定的风险。


0

这与以下事实有关:在运行代码时很难更改代码而又不会引起一些重大问题。解决方案:在更改代码之前停止所有操作,这样就可以确保没有任何运行。这是一种蛮力破解,在很多时候它本来是不需要的,但它绝对是必要的,尤其是当您正要更新特别重要的代码时。实际上,有整个公司专门从事不需要重新启动此特别重要代码的更新。他们的操作方式在本文http://www.ksplice.com/paper中


-1

修改Windows的重要系统文件时,需要重新启动,因为Windows不允许在使用这些文件时对其进行修改。因此,Windows Update中的大多数更新都需要重新启动,而将自身集成到Windows中的程序(如防病毒程序)也需要重新启动。在重新启动之前,Windows无法执行“安装”程序所需的最后几个步骤。

您可以将其与Linux进行比较,后者很少需要重启。即使要求您重新启动,通常也只需要注销然后重新登录。这是因为典型的Linux环境由许多不同的单独程序组成,这些程序可以一起创建一个完整的OS。如果在安装过程中修改了重要文件,通常最多只需重启一个使用该文件的特定程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.