前言 Installshield可以說是最好的做安裝程序的商業(yè)軟件之一,不過因為功能的太過于強大,以至于上手和精通都不是容易的事情,之前都是用Installshield的Project Assistant對付過去的,這次做這個安裝程序,為了實現(xiàn)一些功能,必須寫代碼,國內(nèi)外現(xiàn)成的資料很少,而且很多都語焉不詳,自己反復啃了多次,對比Installshiel自帶的help,才明白資料所表達的意思。這個安裝程序雖然比較簡陋,在行家眼里可能是小菜一碟,但是也花了筆者一個星期的時間,閱讀了很多資料,啃了好幾天英文help,集成了很多先驅(qū)者的經(jīng)驗,也費了自己不少心血做成的,對每一段代碼的用處、每一個用到的函數(shù)都進行了詳細的說明,因此轉(zhuǎn)載時請務必保留轉(zhuǎn)載出處和由艾澤拉斯之海洋女神出品的字樣;如需刊登,請與作者聯(lián)系。 在此要感謝吞硬幣的小豬,天下曉明,余滿青,海洋C++樂園(此海洋不是彼海洋)等大蝦在互聯(lián)網(wǎng)上的無私奉獻,他們的貼子和博客給了我很大啟示。 因為本人是做java出身的,因此對這種類C++語言還是第一次接觸,有理解不當之處,請朋友們指正。歡迎Email至little_fairycat@126.com
正文 需求:公司做了一個軟件產(chǎn)品, 1. 該軟件運行需要JDK環(huán)境(不是JRE,因為該軟件要向windows注冊一個服務,用到了JavaService,JDK才支持這個功能;不過這里側(cè)重于判斷是否安裝了某軟件是否安裝,而不是糾纏于該裝JDK還是該裝JRE); 2. 由于是Server-Client形式的,需要允許用戶選擇安裝組件,比如A機只裝Server端,B機只裝Client端; 3. 文檔不打包在安裝程序里,直接存放在光盤文件夾下方便用戶查看,同時允許用戶指定是否安裝文檔到計算機上(為什么這樣做,后面說明詳細原因); 4. 該軟件會以授權(quán)形式發(fā)放給用戶,不同的用戶,軟件本身可能相同,而不同的只是授權(quán)文件和一些配置,因此希望授權(quán)文件和配置文件不打包在安裝程序里,而直接存放在光盤里,以減少可能的重復打包安裝程序的勞動; 5. 在安裝完畢后,希望能自啟動程序(因為該軟件需要在安裝完畢后啟動一個程序,該程序?qū)崿F(xiàn)向Windows注冊服務的功能,該程序最好由安裝程序啟動,而不是由客戶手動啟動)。 6. 希望有反安裝程序 本文提到的“外部”指不打包在安裝程序里的,與安裝程序一起存放在光盤里的一些文件夾,這些文件夾包含了安裝中所需要的文件,同時也可能有其他用途,因此不適合直接壓縮打包在安裝程序里。 該實例實現(xiàn)了如下功能: 1. 顯示軟件許可協(xié)議 2. 判斷是否安裝了本軟件所需要的先決軟件JKD 3. 安裝允許用戶選擇需要安裝的組件 4. 用戶的輸入信息、所選安裝路徑、所選安裝組件將顯示在安裝界面上(Installshield雖然自帶了此界面,但是默認是顯示為空的,需要寫腳本來顯示信息) 5. 根據(jù)用戶選擇的組件,在開始菜單顯示程序的快捷方式(同樣適用于桌面快捷方式,后面做詳細說明) 6. 根據(jù)用戶選擇的組件,從外部文件夾拷貝相應的文件到安裝目標路徑的文件夾中 7. 根據(jù)從外部拷貝進來的文件,創(chuàng)建快捷方式(這里主要是拷貝文檔,并在開始菜單中創(chuàng)建快捷方式) 8. 在安裝結(jié)束時,顯示readme.txt文件 9. 在安裝結(jié)束后,啟動指定的程序 10. 完美卸載 筆者所用的環(huán)境為Installshield 12 Premier Edition,Windows XP with SP2, 該環(huán)境下建立的工程可以直接使用在Installshield 2008 Premier Edition下,Installshield 2008在打開Installshield 12所建的工程時會提示你是否需要進行Upgrade,確認即可,軟件會自動為你進行升級,很方便。 下面我們一步一步來建立一個基本的工程,并且使用腳本來完善和豐富所需功能
第一部分:基本設置
1. 打開Installshield 12 Premier Edition,新建一個Installscript MSI Project,這種被稱之為半腳本程序,因為兼具Basic Project基本類型和Installscript Project全腳本類型兩者的優(yōu)點,我比較喜歡用。像我這樣需求的,既要用到Wizard的便利,又想寫一點腳本來實現(xiàn)一點自定義操作的,就比較適合用這種類型啦。 選擇類型為Windows Installer | InstallScript MSI Projcet,輸入工程名,指定工程所在的文件夾。
2. 界面會切換到Project Assistant,我們先從這里開始把工程的基本組件和基本文件建立好。
3. 在Project Assistant界面的底部,會有一個引導動作條,在建立該工程的基本結(jié)構(gòu)和文件時,我們都將在此界面進行操作,下文都將以“引導條”來指代這個引導動作條。
4. 點擊引導條上的Application Information 這里輸入: 公司名,公司名將會出現(xiàn)在Setup.exe的注解中 軟件名,將會出現(xiàn)在安裝過程的左上角標題欄上 版本號,沒看到在哪,不過自己比較方便地知道自己在編譯哪個版本的軟件 公司網(wǎng)址,沒看到在哪,而且如果該公司沒有網(wǎng)址呢?而且這里有點bug,好像默認的值總是會報一個String_ID1為空的錯誤,自己輸入一個網(wǎng)址就不會報錯。 是否在你創(chuàng)建了更新時自動通知最終用戶,沒用過,我都選了No。 選擇一個圖標,這個圖標會出現(xiàn)在“添加或刪除程序”里,我一般用默認的,當然你可以替換成自己想要的圖標。
5. 點擊引導條上的Installation Requirement 這里選擇對操作系統(tǒng)和一些軟件的需求。根據(jù)自己需要來選擇是否要求操作系統(tǒng)的版本,已經(jīng)是否要求安裝了某些軟件。
6. 點擊引導條上的Installation Architecture 這是個十分有用的設置,對于本文所用的分布式軟件來說非常合適,分布式軟件的每個組件可以設置為一個Feature,用戶可以自由選擇安裝某些功能。 將選項Do you want to customize your Installation選擇為Yes。 點擊選中根節(jié)點Installation Architecture,點擊New創(chuàng)建新的Feature,可以為每個Feature指定新名稱。 還可以在Feature下創(chuàng)建子Feature,比如如果文檔Feature下包括軟件本身文檔,和軟件所需的運行環(huán)境的文檔,那么可以創(chuàng)建兩個子Feature,分別包含兩種文檔,用戶在安裝時就可以選擇安裝部分或者全部文檔了。這里我們沒有用到子Feature,用途和普通Feature一樣。
這里,建立好所有Feature后,我們將切換到Installation Designer做一個設置
找到Installation Designer頁面上左邊導航樹Organization | Features分支,你會看到這里Features都顯示為原始的名稱,而非我們改過的名字,因為Feature有Name和Display Name兩種名稱,我們剛才改的不過是Display Name,為了便于查看和使用,我們在這里把Name也改一下
注意Name不可以有空格,可以使用下劃線
繼續(xù)切換回Project Assistant
|
|
來自: herowuking > 《Cracker》