为什么有些软件安装完后需要重启电脑
简单地说,⼤多数软件装完后,都需要修改注册表使其在电脑中占有“⼀席之地”,有些软件需要重启是因为它进⼊了注册表核⼼,但开机后的注册表核⼼已经像⼀⾯盾把该软件挡在了门外,该软件要
进⼊,必须重启电脑,赶在那⾯盾建⽴起来之前融⼊注册表。
专业点来讲是这样的:软件安装完成之后,与Explorer有关的设置须等待Explorer重启后才能⽣效;⽽Autoexec.bat中设置环境变量也只能在重新启动计算机时装⼊;系统DLL只能通过在进
⼊Windows前的DOS环境下替换,静态VxD只能在装⼊ Windows的时候载⼊。因此,许多软件在安装完成之后必须重启计算机才能使软件运⾏环境⽣效。
现在⽹吧⼀般装有“还原精灵”,遇到装软件需要重启怎么办呢?很简单,Ctrl+Alt+Del打开任务管理器,在进程⾥⾯到“”,右击——结束进程——⽂件——新建任务(运⾏…)——
输⼊——确定,就可以了。
===详细说明===
软件在安装时,到底做了些什么?⼤家每天都在⽤电脑,可能也经常在⾃⼰的电脑上安装软件。就算⾃⼰没安装过,⾄少也看到⼈家安装过软件。在这⾥,我不是想教你怎么安装软件,⽽是想向你展⽰
,软件在安装的过程中,到底都做了些什么动作?为什么有些软件要安装,直接拷贝过去却不能⽤?为什么⼀些软件安装或卸载之后要重启。下⾯要讨论的就是这些问题。
⾸先,我们探讨⼀下软件安装的共通部分,说共通,就是在不同版本的操作系统上,如WINDOWS98,WIN2K和WINXP等上它们都有共同点的地⽅。这个⽂章也试图不针对具体的某个操作系统,⽽对共同的规
律来探讨,不过我⾃⼰⽤的是WINDOWS98,所以有时⼀些例⼦可能会⽤WINDOWS98上的实例来说明,⽽⼤多数情况下这些特***在WIN2K和WINXP上也是类似的。
那么,我先来归纳⼀下,典型的软件安装过程都有可能做哪些事情。由于我们是讨论软件在安装时的⾏为,所以开始安装前的设置和选项我们就暂不讨论,只说到软件真正开始安装那个时候起的动作:
①⽂件从安装源位置拷贝到⽬标位置。
②往系统⽬录写⼊⼀些必要的动态连接库(DLL)。(可选)
③往系统注册表中写⼊相应的设置项。(可选)
④建⽴开始菜单⾥的程序组和桌⾯快捷⽅式。(可选)
⑤其他动作。(可选)
下⾯我们再详细来分析上⾯归纳出来的这些动作:
1)拷贝软件本⾝需要的⽂件。源位置指软件未安装之前的位置,例如光盘,下载的⽬录等,⽬标位置指你指定的安装位置。
这是⼏乎所有的软件安装过程⼀定会做的⼀件事。⽽如果⼀个软件,在安装时只要这⼀步,不需要后⾯的其他⼏步,我们可以认为这个软件就是绿⾊软件。或者反过来说绿⾊软件就是只要拷贝⽂件,不
需要依赖于某个DLL,或者它依赖的DLL在⼏乎所有的系统中都⼀定有的,并且它也不依赖于注册表⾥⾯的设置项的软件。
2) 这⼀步,可以说⾄少有⼀半软件在安装时都会做,⼀些软件,需要⽤到某个DLL,特别是那些软件作者开发的DLL,或者系统中不常⽤的DLL,⼀般都会随软件的安装拷到系统⽬录。所谓系统⽬录,在
WIN98下⼀般是在WINDOWS\SYSTEM这个⽬录,⽽WIN2K是在WINNT \SYSTEM32,WINXP是在WINDOWS\SYSTEM32。还有,⼀些软件如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:\windows\system\abcd.dll=C:\windows\system\aaaa.lll )
这样,在重启时,进⼊WINDOWS图形界⾯之前,WININIT.EXE在检测到WINDOWS⽬录中有WININIT.INI存在时,就执⾏⾥⾯的操作,在上⾯的例⼦中,是⽤C:\windows\system\aaaa.lll去替换掉
C:\windows\system\abcd.dll这个⽂件,并且把WININIT.INI改名为WININIT.BAK。
dos属于什么软件另外,有些软件,在安装时,是把所有⽂件包括SETUP.EXE解压到临时⽂件⾥⾯再执⾏SETUP.EXE进⾏安装的,按理来说安装完要把所有的临时⽂件删除掉,这个操作当然也是由安装程序SETUP.EXE来完成
,但它⾃⼰正在运⾏,也删不了它⾃⼰,所以也要重启来删除,做法和上⾯差不多,只是改成类似这样⼦的:怦S?vH燁?
NUL=C:\WINDOWS\TEMP\SETUP.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 Files\InstallShield Installation Information这个⽂件夹(隐藏属***)⾥,同样也会
在程序组和注册表中建⽴卸载项。
另外,在卸载时,也会遇到⽂件(⼀般是DLL⽂件)正在使⽤的情况。所以有时卸载的时候也要重启,就是要在重启过程中删掉这些正在使⽤的DLL⽂件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论