用InstallShield制作商品化軟件安裝程序
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
摘 要:結(jié)合對(duì)作者利用VC++6.0開(kāi)發(fā)的工控軟件包制作安裝程序的實(shí)例,介紹了如 何用InstallShield來(lái)制作標(biāo)準(zhǔn)的Windows安裝程序,重點(diǎn)敘述了如何編制程序組(項(xiàng))、 分類安裝(典型、完全和自定義安裝)、卸載、注冊(cè)控件和界面漢化等方面的內(nèi)容。 關(guān)鍵詞:InstallShield;安裝程序;包裝;媒體;卸載;控件注冊(cè) 一 、引言 軟件既是一項(xiàng)工程又是一種產(chǎn)品,稱其為工程是因?yàn)樗前凑展こ痰姆椒ㄟM(jìn)行設(shè)計(jì)、實(shí)施,也就是所謂的軟件工程,作為一項(xiàng)完整的工程項(xiàng)目就必須把最終產(chǎn)品完整有效地交付給用戶;說(shuō)它是一種產(chǎn)品,它符合產(chǎn)品的一系列特性,當(dāng)然最重要的就是產(chǎn)品的包裝,在當(dāng)今充滿競(jìng)爭(zhēng)的時(shí)代里,在提高軟件質(zhì)量的基礎(chǔ)上給產(chǎn)品一個(gè)好的“外殼”,已經(jīng)成為軟件業(yè)的一大需求。 軟件安裝由DOS時(shí)代通過(guò)批處理文件實(shí)現(xiàn)直到UCDOS圖形安裝界面的出現(xiàn),才有一些新意;再到易學(xué)易用的圖形用戶界面、多任務(wù)功能的WINDOWS系統(tǒng)的出現(xiàn),安裝一個(gè)軟件或應(yīng)用程序已不再僅僅是將相關(guān)的文件復(fù)制到硬盤中,而是必須允許用戶按自己的愿望選擇安裝類型和安裝路徑,并且在不需要的時(shí)候,還要能夠?qū)惭b的相關(guān)內(nèi)容全部刪除掉,而且還要保證其完整性和有效性,Installshield就能夠滿足這樣的要求。針對(duì)作者開(kāi)發(fā)的用于化工行業(yè)間歇聚合反應(yīng)過(guò)程先進(jìn)控制的軟件包――化工間歇聚合反應(yīng)過(guò)程的辨識(shí)與控制軟件的商品化問(wèn)題,作者應(yīng)用Installshield制作了Windows環(huán)境下的標(biāo)準(zhǔn)安裝程序,經(jīng)過(guò)反復(fù)調(diào)試和檢驗(yàn)達(dá)到了預(yù)期的目標(biāo),安裝及卸載都十分方便。 二、用InstallShield制作安裝程序的步驟 1.建立工程文件 打開(kāi)InstallShield 相關(guān)應(yīng)用程序,雙擊“Project Wizard”,按照向?qū)崾据斎牍こ痰南嚓P(guān)信息。當(dāng)然這里輸入的是給相關(guān)變量賦值,在編譯之前可以對(duì)其進(jìn)行修改,打開(kāi)資源Resources,對(duì)其相關(guān)屬性的變量進(jìn)行重新賦值即可;另外,還需對(duì)菜單項(xiàng)“Project”中的產(chǎn)品名稱進(jìn)行更改。 2.文件組配置 打開(kāi)文件組File Groups工作區(qū),展開(kāi)樹(shù),給相應(yīng)的文件組鏈接對(duì)應(yīng)文件,對(duì)應(yīng)文件會(huì)顯示在相應(yīng)的區(qū)域。單擊相應(yīng)文件組,對(duì)其其屬性進(jìn)行設(shè)置,重要的有:[Shared]指定當(dāng)前文件組中的文件是否為共享文件,即該文件是否被多個(gè)應(yīng)用程序共同使用,若設(shè)為共享文件InstallShield在應(yīng)用程序安裝過(guò)程中會(huì)自動(dòng)處理這些文件的注冊(cè);[Self Registered]設(shè)置當(dāng)前文件組中的文件是否自注冊(cè),這個(gè)功能能夠?qū)⑾嚓P(guān)文件在安裝過(guò)程中進(jìn)行注冊(cè),卸載時(shí)也會(huì)自動(dòng)將這些注冊(cè)信息刪除;[Compressed]指定當(dāng)前文件組中的文件在建立媒體庫(kù)時(shí)是否被壓縮,這里的設(shè)置在安裝媒體向?qū)У拇疟P類型中不選擇[Data as files]復(fù)選框是有效的,否則不管如何設(shè)置應(yīng)用程序即不存儲(chǔ)在電纜文件中也不被壓縮;[Overwrite]指定當(dāng)前文件組中文件覆蓋終端用戶計(jì)算機(jī)系統(tǒng)中已存在同名文件的條件;[Destination]指定當(dāng)前文件組在安裝過(guò)程中被傳輸?shù)哪繕?biāo)位置。 3.組件設(shè)置 打開(kāi)組件“Components”工作區(qū),可以新建組件,組件的重要屬性有:“Status Text”是標(biāo)志在復(fù)制對(duì)話的進(jìn)度條上看到的文本;“Display Name”是給定當(dāng)前組件顯示給終端用戶的文本;“File Need”是指定組件的級(jí)別,【Critical】對(duì)于安裝程序不允許終端用戶不選擇該組件,【Recommended】是建議終端用戶應(yīng)該選擇安裝該組件,【Standard】如果終端用戶沒(méi)有選擇該組件,不會(huì)顯示任何信息;“Include in Build”是表示是否將該組件包含到發(fā)行媒體中,暫時(shí)將本特征不包含到發(fā)行媒體給這個(gè)組件留下位置,以便以后升級(jí)。“Required Components”是將此組件必需的其它組件鏈接在一起;“Included File Groups”可以為當(dāng)前組件增加和刪除與之相關(guān)的文件組;其它屬性默認(rèn)即可。 4.在Setup.rul底稿文件中添加代碼 充分利用InstallShield資源可以省去不少代碼編寫(xiě),特別是InstallShield提供的一些內(nèi)部函數(shù),可以實(shí)現(xiàn)豐富的功能,需要特別注意的是大小寫(xiě)是嚴(yán)格區(qū)分的。 5.編譯工程 從【Build】菜單中選擇【Compile】選項(xiàng)對(duì)腳本進(jìn)行編譯;編譯通過(guò)后選擇【File】菜單中的【Save】選項(xiàng)進(jìn)行腳本修改的保存。 6.定制MEDIA(安裝媒體) 從【Build】菜單中選擇【Media Wizard】選項(xiàng)啟動(dòng)媒體制作向?qū)В凑仗崾疽徊揭徊竭M(jìn)行,最后出現(xiàn)所設(shè)置的總信息,不妥后退進(jìn)行修改,最后確認(rèn)后按【完成】后定制媒體。 7.測(cè)試 文件安裝媒體制作完成之后,就可以進(jìn)行測(cè)試,從【Build】菜單中選擇【Run Setup】運(yùn)行,安裝完成后可以通過(guò)【開(kāi)始】菜單的【程序】中的快捷方式運(yùn)行安裝的應(yīng)用程序。最后運(yùn)行卸載程序?qū)?yīng)用程序從系統(tǒng)中刪除。 三、安裝程序初始化 在函數(shù)OnFirstUIBefore()中輸入如下腳本代碼進(jìn)行初始化程序。 1.安裝背景設(shè)置 SetFont(FONT_TITLE,STYLE_BOLD|STYLE_SHADOW, "Arial");//設(shè)置字體 SetTitle(@TITLE_CAPTIONBAR,0, BACKGROUNDCAPTION );//設(shè)置標(biāo)題 SetTitle( @TITLE_MAIN, 24, WHITE ); //設(shè)置對(duì)話框主題字體和顏色 Enable( FULLWINDOWMODE ); //允許全屏顯示 Enable( BACKGROUND ); //允許背景設(shè)置有效 SetColor(BACKGROUND,RGB (0, 128, 128)); //設(shè)置背景顏色 2.加載圖片 在任何時(shí)候都可以加載圖片以裝飾安裝程序,方法如下: svPicName = SUPPORTDIR ^ "pic6.bmp"; //定義圖片路徑 DialogSetInfo(DLG_INFO_ALTIMAGE,svPicName,TRUE);//在對(duì)話框中顯示 svPicName = SUPPORTDIR ^ "pic2.bmp"; PlaceBitmap(svPicName,13,0,0,FULLSCREENSIZE);//全屏顯示圖片作為背景 在加載下一幅圖片的時(shí)候要先移去上一幅已加載的圖片,方法如下: PlaceBitmap ("",13,0,0,REMOVE); 3.系統(tǒng)變量的設(shè)置 nSetupType = TYPICAL; //預(yù)設(shè)默認(rèn)安裝類型 TARGETDIR = "D:\\"^@PRODUCT_NAME; //設(shè)置默認(rèn)安裝路徑 svName = "Name"; //用戶默認(rèn)名 svCompany = "Company"; //公司默認(rèn)名 svSerial = "123-EDC-532-386"; //序列號(hào) 四、定制程序組(項(xiàng)) function SetupFolders() NUMBER nResult,nIcon, nFlag; STRING szProgramFolder,szItemName,szCommandLine,szWorkingDir,szIconPath; STRING szShortCutKey, szProgram, szParam,svTmp; begin szProgramFolder = @PRODUCT_NAME; if (CreateProgramFolder(szProgramFolder) < 0) then return -1; endif; //設(shè)置快捷方式的工作環(huán)境 nIcon = 0; szShortCutKey = ""; nFlag = REPLACE; szWorkingDir = TARGETDIR; szIconPath = TARGETDIR+"\\"+@PRODUCT_KEY; //圖標(biāo)選擇 szItemName = @PRODUCT_NAME; szProgram = szIconPath; LongPathToQuote(szProgram, TRUE); szCommandLine = szProgram; if(AddFolderIcon(szProgramFolder,szItemName,szCommandLine,szWorkingDir, szIconPath,nIcon,szShortCutKey,nFlag)< 0) then return -1; //在開(kāi)始菜單的程序組中增加啟動(dòng)該應(yīng)用程序的快捷方式 endif; if(AddFolderIcon(FOLDER_DESKTOP, szItemName, szCommandLine, szWorkingDir,szIconPath,nIcon,szShortCutKey, nFlag) < 0)then return -1; //在桌面上增加啟動(dòng)該應(yīng)用程序的快捷方式 endif; //卸載的設(shè)置 szWorkingDir = WINDIR; szIconPath = SUPPORTDIR+"\\IsUninst.exe"; szItemName = "卸載"+@PRODUCT_NAME; svTmp=PROGRAMFILES+"InstallShieldInstallationInformation\\"+PRODUCT_GUID+"\\setup.exe"; LongPathToQuote(svTmp, TRUE); szParam = svTmp; LongPathToShortPath(szParam); svTmp=COMMONFILES+"InstallShield\\engine\\6\\Intel32\\ctor.dll"; LongPathToShortPath(svTmp); szProgram = "RunDll32"+" "+ svTmp+",LaunchSetup"; szCommandLine = szProgram + " " + szParam; if(AddFolderIcon(szProgramFolder,szItemName,szCommandLine,szWorkingDir, szIconPath, nIcon,szShortCutKey,nFlag)< 0) then // 在開(kāi)始菜單中設(shè)置卸載快捷//方式 return -1; endif; end; 五、對(duì)象嵌入技術(shù) 使用InstallShield對(duì)象,我們可以很方便地安裝關(guān)鍵的Windows技術(shù),包括ODBC、Access、ADO、DAO、RDO、OLE DB、DirectX以及其它技術(shù),只要按照InstallShield嵌入對(duì)象向?qū)Р僮骷纯?/SPAN>,這里以嵌入ODBC為例子詳細(xì)說(shuō)明: 首先利用 Windows控制面板中的ODBC數(shù)據(jù)源建立數(shù)據(jù)配置文件,需要與所建的數(shù)據(jù)庫(kù)文件聯(lián)系起來(lái),這里是DOT.MDB文件,數(shù)據(jù)源名設(shè)置為DOT,退出后可以看到剛才建立的數(shù)據(jù)源。在Components工作區(qū)右擊相應(yīng)的組件,從彈出菜單中選擇【Insert InstallShield Object】,打開(kāi)對(duì)象瀏覽樹(shù),選中“NEW ODBC 3.51”,單擊【Add Object】按鈕將會(huì)把該對(duì)象加入到Resources工作區(qū)中的InstallShield Objects文件夾中以及剛才的組件中,然后就會(huì)有向?qū)?dòng)(嵌入其它對(duì)象時(shí),沒(méi)有向?qū)дf(shuō)明已經(jīng)完成,關(guān)閉對(duì)象瀏覽器即可),按照向?qū)崾就瓿蒓DBC對(duì)象嵌入,在安裝過(guò)程中會(huì)自行注冊(cè)。大多數(shù)對(duì)象都是直接嵌入即可。 六、控件注冊(cè) 方法一:用戶手工注冊(cè),利用VC++自帶的DOS命令REGSVR32.EXE(在\bin目錄下)或者直接用下列方法:點(diǎn)擊“開(kāi)始”→“運(yùn)行”;輸入以下命令進(jìn)行注冊(cè): regsvr32 < 文 件 名 > 注冊(cè)一個(gè)控件 regsvr32 /u< 文 件 名 > 解除某控件的注冊(cè) 方法二:利用InstallShield的自注冊(cè)功能,在文件組里新建一個(gè)文件組,這里取名為“BatchAPC 環(huán)境變量”,然后在這個(gè)新建文件組里鏈接需要注冊(cè)的文件,這里是兩個(gè)ActiveX控件MSCHRT20.OCX和MSCOMM32.OCX,將屬性中的“Self-Registered” 設(shè)置為“Yes”,一般默認(rèn)為“No”,這樣就不需要編寫(xiě)代碼來(lái)進(jìn)行注冊(cè)了。 七、界面漢化 一般用InstallShield作出來(lái)的安裝程序是英文安裝界面,這里我們使用的是InstallShield Profession standard 6.22版本,《InstallShield 6.X/VB/VC/Delphi安裝程序設(shè)計(jì)與制作》這本書(shū)所帶的光盤上有漢化工具,若沒(méi)有,可以手工漢化,方法如下: 首先找到用InstallShield 5.X制作的漢化版安裝程序,執(zhí)行,在安裝出現(xiàn)歡迎對(duì)話框的時(shí)候最小化,安裝程序會(huì)在“C:\Windows\Temp\_istmp0.dir\”目錄下生成一個(gè).dll文件,將其拷貝到其它地方,然后改名為_isres.dll,再將恢復(fù)后的_isres.dll拷貝到InstallShield安裝目錄“\Redistributable\CompressedFiles \0009-English \Intel 32”下;再將Setup.exe中文版拷貝到“\Redistributable\UncompressedFiles\Language Indepedent\Intel 32\”目錄下;最后將Setup.dll中文版拷貝到“\Redistributable \UncompressedFiles\LanguageIndepedent\OSIndepedent\”目錄下即可。一般情況下要是不能正常運(yùn)行,恢復(fù)英文版的Setup.exe,然后在Win2000下用VC++ 6.0對(duì)其按資源編輯。漢化的實(shí)質(zhì)就是將這三個(gè)文件改為中文版,另兩個(gè)文件也可以用VC++6.0 編輯漢化。 注意:在漢化之前務(wù)必將英文版的_IsRes.dll、Setup.dll和Setup.exe三個(gè)文件備份。 八、結(jié)束語(yǔ) 綜上所述,通過(guò)上面的介紹可以制作出標(biāo)準(zhǔn)的安裝程序,當(dāng)然,InstallShield的功能不僅僅是這些,界面的友好性和多媒體技術(shù)的應(yīng)用已經(jīng)成為完善安裝程序的方向,軟件的包裝現(xiàn)在已經(jīng)受到重視,特別是商品化所帶來(lái)的競(jìng)爭(zhēng)機(jī)制,使其發(fā)展更快捷、更豐富。 參考文獻(xiàn) 1.丁有和 著 InstallShield簡(jiǎn)明使用教程(電子文檔),2001.1 2.張君等 著 2001編程寶典叢書(shū)4 引人入勝InstallShield6.X/VB/VC/Delphi安裝程序設(shè)計(jì)與制作.北京希望電子出版社, 2001.1 3.Jeffrey M. Rhodes 著 InstallShield Professional Primer for ToolBook Installations 4.黃進(jìn)林 著 利用InstallShield 制作PowerBuilder應(yīng)用程序安裝盤.電腦編程技巧與維護(hù), 2001.3:9-12 該文章在 2010/12/2 12:19:06 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |