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