簡述常見軟件安裝過程


【轉載】

 

軟件在安裝時,到底做了些什么? 大家每天都在用電腦,可能也經常在自己的電腦上安裝軟件。就bai算自己沒安裝過,至少也看到人家安裝過軟件。在這里,我不是想教你怎么安裝軟件,而是想向你展示,軟件在安裝的過程中,到底都做了些什么動作?為什么有些軟件要安裝,直接拷貝過去卻不能用?為什么一些軟件安裝或卸載之后要重啟。下面要討論的就是這些問題。
首先,我們探討一下軟件安裝的共通部分,說共通,就是在不同版本的操作系統上,如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]一節中寫入這一項:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM