为什么有些软件安装完要重启,电脑下载的软件重启后就没了

很多软件在安装完成以后都会友好地询问用户:

为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图
每当我心中看到这两句话时,心中那一句妈卖X早已重复了不知多少遍 。
为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图

为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图

为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图
【为什么有些软件安装完要重启,电脑下载的软件重启后就没了】重启电脑,虽然明知道只要保存了文件就不会有任何损失,但是心中总感觉丢失了什么,好像重启了这遍电脑之前所做的一切就统统白费了 。更何况有的时候根本没看见那个提示 , 一个“完成”点过去 , “啪”,“正在重新启动”,那一刻,真是心都碎了 。
为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图
不过,那些软件为什么非要打断用户的使用强行让用户重启电脑呢?
其实在之前,每当我遇到一个需要重启电脑的软件时都会对这个软件吼一声“mamaip”,不过现在,每当我遇到一个需要重启电脑才能用的软件时,我不会针对哪个软件了,我只会对着微软,对着windows大喊一声“XXX”(此处省略三个都懂的文字) 。
为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图

为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图
绝大多数时候这并不是软件的原因,而是windows系统本身结构和设计所致 。
在windows中负责保存核心数据的地方叫注册表,其中的参数将决定着windows的启动、硬件驱动的调用以及部分软件的运行 。比如你在打开一部嘿嘿嘿的电影时,某影音可能就需要从此获得参数以完成解码 。
为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图
锅就出在注册表身上 。软件想要在计算机的核心占有一席之地,必须要在注册表中进行“注册”,就像孩子出生后需要上户口一样 。不过很蛋疼的是,注册表在系统完成加载以后就会将新人拒之门外 , 新人要想“注册”,就必须趁着系统没有加载完全时“乘虚而入” 。
还有一些情况是,软件安装需要注册的系统组件恰好与其他软件共用,但在其他软件运行时并不能修改其参数 。其实这种情况下,理论上只需要重新启动某几个软件就行,但实际操作起来实在是很困难,直接重启电脑比“重启ABCDEFG软件”简单(粗暴)的多 。
虽然知道缘由了,但心里还是有一句
为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图

为什么有些软件安装完要重启,电脑下载的软件重启后就没了

文章插图
为什么安装某些软件后需要重启电脑?简单地说,大多数软件装完后,都需要修改注册表使其在电脑中占有“一席之地”,有些软件需要重启是因为它进入了注册表核心,但开机后的注册表核心已经像一面盾把该软件挡在了门外,该软件要进入,必须重启电脑,赶在那面盾建立起来之前融入注册表 。专业点来讲是这样的:软件安装完成之后,与Explorer有关的设置须等待Explorer重启后才能生效;而Autoexec.bat中设置环境变量也只能在重新启动计算机时装入;系统DLL只能通过WinInit.exe在进入Windows前的DOS环境下替换,静态VxD只能在装入 Windows的时候载入 。因此,许多软件在安装完成之后必须重启计算机才能使软件运行环境生效 。现在网吧一般装有“还原精灵”,遇到装软件需要重启怎么办呢?很简单,Ctrl+Alt+Del打开任务管理器 , 在进程里面找到“explorer.exe”,右击——结束进程——文件——新建任务(运行…)——输入explorer.exe——确定 , 就可以了 。===详细说明===软件在安装时,到底做了些什么?大家每天都在用电脑,可能也经常在自己的电脑上安装软件 。就算自己没安装过,至少也看到人家安装过软件 。在这里 , 我不是想教你怎么安装软件,而是想向你展示,软件在安装的过程中,到底都做了些什么动作?为什么有些软件要安装,直接拷贝过去却不能用?为什么一些软件安装或卸载之后要重启 。下面要讨论的就是这些问题 。首先,我们探讨一下软件安装的共通部分,说共通 , 就是在不同版本的操作系统上,如WINDOWS98,WIN2K和WINXP等上它们都有共同点的地方 。这个文章也试图不针对具体的某个操作系统 , 而对共同的规律来探讨,不过我自己用的是WINDOWS98 , 所以有时一些例子可能会用WINDOWS98上的实例来说明,而大多数情况下这些特***在WIN2K和WINXP上也是类似的 。那么 , 我先来归纳一下,典型的软件安装过程都有可能做哪些事情 。由于我们是讨论软件在安装时的行为,所以开始安装前的设置和选项我们就暂不讨论,只说到软件真正开始安装那个时候起的动作:①文件从安装源位置拷贝到目标位置 。②往系统目录写入一些必要的动态连接库(DLL) 。(可选)③往系统注册表中写入相应的设置项 。(可选)④建立开始菜单里的程序组和桌面快捷方式 。(可选)⑤其他动作 。(可选)下面我们再详细来分析上面归纳出来的这些动作:1)拷贝软件本身需要的文件 。源位置指软件未安装之前的位置 , 例如光盘,下载的目录等,目标位置指你指定的安装位置 。这是几乎所有的软件安装过程一定会做的一件事 。而如果一个软件,在安装时只要这一步,不需要后面的其他几步,我们可以认为这个软件就是绿色软件 。或者反过来说绿色软件就是只要拷贝文件 , 不需要依赖于某个DLL , 或者它依赖的DLL在几乎所有的系统中都一定有的,并且它也不依赖于注册表里面的设置项的软件 。2) 这一步,可以说至少有一半软件在安装时都会做,一些软件,需要用到某个DLL,特别是那些软件作者开发的DLL,或者系统中不常用的DLL,一般都会随软件的安装拷到系统目录 。所谓系统目录,在WIN98下一般是在WINDOWSSYSTEM这个目录 , 而WIN2K是在WINNT SYSTEM32 , WINXP是在WINDOWSSYSTEM32 。还有,一些软件如QQ游戏,中游等,它们也用到一些DLL,由于这些DLL只是这个软件自己用到,别的其他软件不会用到 , 所以它们并不一定存在于系统目录,而是放在软件安装目录里面,这样的DLL已经在上一步中被拷贝,所以和这一步说的情况不一样 。3)这一步同样至少有一半软件会做,一般在安装前用户的设置和一些选项,在安装时就会把这些设置写到注册表里 。另外就是有时在上一步把DLL拷贝到系统目录时,一些DLL需要向系统注册 , 这些DLL的注册信息也会写在注册表里 。还有,一些软件有时可能安装时并不写注册表,而是在第一次运行时才把一些设置写到注册表 。4)这个非常简单 , 大概不需要怎么解释 。建立这些快捷方式一方面是便于用户执行,另外在时也会把卸载的快捷方式放在程序组里 。关于卸载后面我们再来讨论 。5)这个就是除了上面说的以外的其他情况 。例如有些软件安装时会先把所有文件(或一部分文件)先解压到临时目录,那么安装完之后就要把这些文件删除掉 。那么我们再总结一下:一、一个典型的软件在安装过程一般都会执行上面的1-4项 。这样可以认为是一个完整的安装过程 。二、除了第1项之外,其他的都不是必要的 。只需要第一项的软件,我们可以把它叫做绿色软件 。三、有些软件安装时是执行了1、2、4,有些软件是执行了1、3、4,有些软件是执行了1、4 。四、一个特殊的情况,一般的驱动程序,只会执行2和3,没有1和4 。五、理论上 , 任何软件,如果你非常确切地知道了它在上面的那几步都具体做了些什么,特别是2和3,那么,理论上你可以把这个软件的安装文件拷贝到另一台机子,把必要的DLL从系统目录拷贝到那一台机子的系统目录,再把注册表里软件写入的项目导出来(必要时还要修改一下)再导入到那台机子的注册表中,那么,就算不是绿色软件,你也能这样把它移植给另一台机 。但有时特别是一些共享软件 , 一般都会有注册表中设置比较隐蔽的项目,不容易查找,所以除非你对系统非常熟悉,否则不是绿色软件的软件要移植还是有一定的难度的 。那么,下面我们再来看看,为什么一些软件安装后要重启 。在 WINDOWS操作系统上,一般一个正在运行中的程序,操作系统是不让你修改它的,修改包括替换 , 改动和删除 。那么有时,一些软件需要向系统目录中写入一个DLL,而系统目录中原来已经有同名的DLL并且这个DLL目前正在被系统使用 , 因此不能用新版本去替换它 , 这个时候就需要重启 , 在重启的过程中,在这个DLL旧的版本被使用之前用新版本替换它 。这就是为什么要重启的原因 。你能看到这里,说明你很有耐心,并且对技术的探讨很有兴趣,那么我就再说得更详细些 。在WIN98中 , 上面说的这个替换是由系统的一个工具来实现的,这个工具叫WININIT.EXE 。安装程序在检测到需要写入的DLL 或其他程序文件正在使用时,会把要写入的DLL文件先定一个临时的文件名,然后在WINDOWS目录中往WININIT.INI写入一个改写项,比如 , 一个叫ABCD.DLL的动态连接库现在正在使用中,而安装程序要往系统中写入新版本的ABCD.DLL,这时安装程序会把新版本ABCD.DLL先定一个临时文件名,例如AAAA.LLL,然后在WININIT.INI中的[rename]一节中写入这一项: C:windowssystemabcd.dll=C:windowssystemaaaa.lll ) 这样,在重启时 , 进入WINDOWS图形界面之前,WININIT.EXE在检测到WINDOWS目录中有WININIT.INI存在时,就执行里面的操作 , 在上面的例子中,是用C:windowssystemaaaa.lll去替换掉C:windowssystemabcd.dll这个文件,并且把WININIT.INI改名为WININIT.BAK 。另外,有些软件 , 在安装时,是把所有文件包括SETUP.EXE解压到临时文件里面再执行SETUP.EXE进行安装的,按理来说安装完要把所有的临时文件删除掉,这个操作当然也是由安装程序SETUP.EXE来完成,但它自己正在运行,也删不了它自己,所以也要重启来删除 , 做法和上面差不多,只是改成类似这样子的: 怦S?vH烨?NUL=C:WINDOWSTEMPSETUP.EXE在WIN2K和WINXP中 , 存在类似的机制 , 不过并不是用WININIT.EXE和WININIT.INI来实现 , 具体的做法我也不是很清楚 , 长期以来我大多数时候都是在用WIN98,所以没认真研究过,但软件安装过程要重启的现象在2K和XP上是仍然存在的,原理也是在重启时替换或修改正在使用的文件,只是实现的方式不同 。最后,我们再来看看有关卸载方面的内容 。一般卸载有好几种方式:1)早期的安装程序 , 一般会在安装过程记录了上面说的安装过程的1234四个步骤中具体拷贝的文件和DLL以及注册表项,把它保存在INSTALL.LOG之类的文件中,再在软件的安装目录(或WINDOWS目录中)放一个UNINST.EXE之类的卸载程序 。然后要么在程序组里为这个UNINST.EXE建一个快捷方式,要么在注册表中为这个UNINST.EXE建一个快捷方式(这?诳刂泼姘宓奶砑由境?绦蚓湍芸吹饺砑?男对叵?,并把INSTALL.LOG做为它的参数 , 这样就实现卸载了 。2)现在比较多的安装程序是用新版的INSTALLSHIELD生成的,安装时的记录和卸载程序一般是会放在 C:Program FilesInstallShield Installation Information这个文件夹(隐藏属***)里,同样也会在程序组和注册表中建立卸载项 。另外,在卸载时,也会遇到文件(一般是DLL文件)正在使用的情况 。所以有时卸载的时候也要重启,就是要在重启过程中删掉这些正在使用的DLL文件 。