软件安装过程

软件安装的过程当中都作了些什么

软件在安装时,到底作了些什么? 你们天天都在用电脑,可能也常常在本身的电脑上安装软件。就算本身没安装过,至少也看到人家安装过软件。在这里,我不是想教你怎么安装软件,而是想向你展现,软件在安装的过程当中,到底都作了些什么动做?为何有些软件要安装,直接拷贝过去却不能用?为何一些软件安装或卸载以后要重启。下面要讨论的就是这些问题。     首先,咱们探讨一下软件安装的共通部分,说共通,就是在不一样版本的操做系统上,如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、一个典型的软件在安装过程通常都会执行上面的1-4项。这样能够认为是一个完整的安装过程。 2、除了第1项以外,其余的都不是必要的。只须要第一项的软件,咱们能够把它叫作绿色软件。 3、有些软件安装时是执行了一、二、4,有些软件是执行了一、三、4,有些软件是执行了一、4。 4、一个特殊的状况,通常的驱动程序,只会执行2和3,没有1和4。 5、理论上,任何软件,若是你很是确切地知道了它在上面的那几步都具体作了些什么,特别是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]一节中写入这一项: 筛l罉枓犮 C:\windows\system\abcd.dll=C:\windows\system\aaaa.lll CX=B) 这样,在重启时,进入WINDOWS图形界面以前,WININIT.EXE在检测到WINDOWS目录中有WININIT.INI存在时,就执行里面的操做,在上面的例子中,是用C:\windows\system\aaaa.lll去替换掉C:\windows\system\abcd.dll这个文件,而且把WININIT.INI更名为WININIT.BAK。      另外,有些软件,在安装时,是把全部文件包括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文件。     关于软件的安装过程,大概就想到这里,之后再有想到什么的,我再补充,你们有什么看不懂的也能够把问题提出来。
相关文章
相关标签/搜索