又一打包工具介绍:Installshield 打包安装包心得
2|我的照片書??|
一.?說明
?
閱讀對象:本人,IS的初學者。
適用版本:Installshield 12。
目的:?????? 為了讓初學IS的朋友少走些彎路,雖然不是很好的寶典,但里面很多細節(jié)都是制作安裝包常碰到
????????????????? 的經典問題。另外,也為了給自己留一些資料,方便以后查詢,人的記憶力有限嘛。
?內容:???? ?制作一個簡單的安裝包;制作定制的安裝包;其它細節(jié)注意;
二.?Installshield 介紹。
1.?公司介紹。
????? InstallShield 軟件公司是美國的一家專業(yè)從事安裝軟件開發(fā)工具生產的著名軟件公司。該公司由Viresh Bhatia和Rick Harold于1987年創(chuàng)建。自Windows軟件開發(fā)之初,InstallShield軟件公司就已經專注于通用安裝軟件制作工具的開發(fā)并解決Windows操作系統(tǒng)發(fā)展和變革所帶來的挑戰(zhàn),以滿足開發(fā)人員及最終用戶的需要。其主打產品InstallShield為滿足各種平臺和不同的安裝需求提供完整的軟件安裝解決方案,并且已經形成人們所熟悉的一套軟件安裝的工業(yè)標準。
2.?產品介紹。
????? 在微軟Windows 2000操作系統(tǒng)引入Windows Installer(WI)服務之前,InstallShield公司以其擁有的標準的標準和技術在同類公司中遙遙領先。但由于WI的出現(xiàn)后,WI使得用戶可以利用微軟提供的API函數(shù)構建符合微軟標準的安裝軟件,并充分享用微軟WI服務的諸多好處。為了跟上安裝軟件技術的自然進化,滿足用戶的需求和接受新挑戰(zhàn),1999年9月,InstallShield 公司開始宣布InstallShield2000 專業(yè)版(簡稱ISPro2K)面世,這是該公司首次將軟件安裝開發(fā)工具劃分采用自身傳統(tǒng)標準的InstallShield Professional 和采用 微軟標準Windows Installer標準的InstallShield for Windows Installer兩個不同版本。
三.?制作簡單的安裝軟件。
聲明:下面的教程,是把讀者當做完全沒接觸過IS的角度來制作的。
1.?啟動InstallShield 12。建立一個InstallShield MSI Project,如圖:
2.?建好后,選擇Project Assistant.
?
你會發(fā)現(xiàn)下邊有8個選項。接下來就一項一項開始設置。
3.?點擊Application Information.
輸入公司名稱,應用程序的名稱(注意:這個不是打包完后安裝包的名稱,默認的安裝包名稱為Setup.exe,不過可以自己定義,稍后講),版本號,公司網址,選擇“添加/刪除程序”中的圖標。
4.?點擊Installation Requirements.
這里可以選擇自己的打包軟件適合運行的操作系統(tǒng)和必須安裝的第三方軟件。選不選根據自己的需要。
5.?點擊 Installation Achitecture。
這里可以定義打包文件的組織結構,默認有個DefaultFeature,將文件放在這個feature下,則都默認是必須安裝的。有印象的朋友會記得,在安裝某些軟件的時候,會有,“typical(典型)”“custom(自定義)”界面提示,選擇典型安裝,就是所有文件都安裝,選擇自定義安裝,就可以去掉一些不需要安裝的文件,但其它文件就是必須安裝的。這個還是需要自己反復折騰一下才能明白。至于怎么加文件到feature下面,稍后講述。
6.?點擊 Application Files。
?
這里講述如何添加文件。上面圖片的紅色區(qū)域中的文件就是我加進去的,加到了安裝目錄下了(注意:有個INSTALLDIR)。在這里,你就可以把你要打包的所有文件加進來。加入你安裝目錄下有文件夾,則先在左邊右擊GAGA,添加文件夾,再往里面添加文件。注意:添加完文件后,全選文件,右擊,選中“Always Overwrite”。否則有時會出現(xiàn)重新安裝后,有些文件沒有被覆蓋。
7.?點擊 Application shortcut。
?
為自己的安裝程序生成快捷方式,可以創(chuàng)建 開始菜單和桌面的快捷方式,細心發(fā)現(xiàn)的話,你會看見左邊有個“Create an uninstallation shortcut”的選項,那個就是用來創(chuàng)建一個卸載方式的,不過很遺憾,這個快捷方式卸載后有時會有些文件刪除不干凈,不能做到完美卸載。關于怎么創(chuàng)建卸載快捷方式,做到完美卸載,在后面會講。
8.?點擊 Application Registry。
點完后就直接跳過吧,簡單的安裝工程,基本不用到這個。要了解如何操作注冊表,在后面會說。
9.?點擊 Installation Localization。
這里我們選上“Chinese”,默認是選上英文。如果要設置中文為默認語言的話,需要點擊Installation Designer->Installation Information->General Information->String table,右擊Chinese,選擇 “Make default”。如圖:
?
返回Project Assistant.這下還可以把英文去掉,因為之前英文被設為默認,所以不能直接在這里去掉,非得這么折騰一番。
10.? 點擊 Build Installation。
??
這里可以選擇Single 或者 CD-ROM,區(qū)別在于第一種只生成一個.exe文件,而后者會生成好多文件,包括.msi文件等。第一種生成格式適合于制作升級程序,一般的升級程序都只要一個.exe文件就好了。點擊“Build Installations”就可以生成安裝包了,生成的安裝包,點擊"Open release folder”就可以找到了。
四.?制作定制的安裝軟件。
聲明:該部分主要是根據自己本身在項目當中打包安裝軟件的時候碰到的一些問題,稍微整理一下作為這部分主要講解的內容,由于項目功能的局限還有本人能力的有限,只能講解自己解決的一些經典問題,并不能全面覆蓋到強大的IS的各個方面,僅供讀者參考。
這部分的內容貌似比較吸引人哦,“定制”兩字給人比較實用,有趣的感覺。
這部分內容我們和上面制作簡單的安裝軟件走不一樣的道路,這部分內容需要新手對IS有一定的折騰后再來看,就比較適合啦。廢話不再講,開始講解吧。
點擊 Installation Designer ,如圖:
?
1.?點擊 Installation Information
管理員權限安裝設置:
點擊 General Information ,選擇 Summary Information Stream, 選擇 Require Administrative Priviledge, 將該項選擇 “Yes”。這樣設置之后,用戶就可以有管理員的權限去安裝該安裝文件了,避免用戶在安裝的時候出現(xiàn)權限不夠的問題。如圖:
?
更改“添加/刪除程序”面板中軟件的圖標。
設置”添加/刪除程序”面板中軟件可卸載。
General Information -> Add or Remove Programs -> Disable Change Button, Disable Remove Button, Disable Repair Button,這三個至少要有一個選為“NO”,全部設為“YES”的話,則在這個面板中,對應的軟件沒有“更改/刪除”的按鈕可以點擊,即在這里就卸載不了軟件了。那就得自己去注冊表里胡搞亂改,把它搞掉了。
設置“軟件名稱”,“版本號”還有“安裝路徑”。
關于“Product Code”和“Upgrade Code”以及版本升級問題。
這兩個關乎到版本升級問題,理論上,XP是不允許用戶安裝兩個相同Product Code的同一個軟件的,即時,每一個版本的安裝包,都必須有新的Product Code。但其實,很多時候,我們在項目的時候,并不是每一次release都是一個新版本,因為有可能只是更改了一點點,不足以作為一個新版本,這是我們可以稱為是一個小版本,比如,V1.0.0-》V1.0.1。我查了一下幫助文檔,找到了”Chaning the Product Code”這篇文章,里面開頭有這么一句:An update that meets the following guidelines generally does not require a change of the product code and can be handled as a small update, or if the version is to change, as a minor upgrade。(詳細請按F1,官方文檔才是王道)
這句話的意思是,當update屬于 small update 或者 minor upgrade的時候,就不用更改product code,這兩者的區(qū)別在于,minor upgrade更改了 product version。除了這兩個之外,剩下的一個就是major upgrade,生成這種安裝包的時候,就需要更改product code 和 producr version。(還是不明白的請看官方幫助文檔)
另外,還有個叫做 package code的東西,當你每次release一個新的安裝包的時候,無論是上面哪一個,這個package code都會改變,這是IS給安裝包自動重新生成的。不用用戶區(qū)設置。這是作為每個release包的唯一區(qū)別。
總的來說:當你生成一個大版本,如V1.0.0->V2.0.0,這是就需要換Product Code了(方法:General Information -> Product Properties->Product Code, 選中它, 左下方有個Generate GUID的按鈕,點擊它就可以重新生成,記得與Media->Release->PROJECT_ASSISTANT中的Product Code保持一致,否則在卸載的時候會出現(xiàn)問題),否則就不用更改。
??? 當小版本實現(xiàn)覆蓋安裝的時候,記得還要在Media->Upgrades->Update Windows Installer Setup中,common下選中prompt,這樣,當你覆蓋安裝的時候,系統(tǒng)就會提示你是否要覆蓋安裝,否則則會提示你,已經安裝了 某個Product Code 的產品,不讓覆蓋安裝。
去掉安裝界面還有卸載界面上面的”InstallShield Wizard”等字眼。
General Information -> String Tables
選中你采用的那個語言。在“Value”列中,將”InstallShield Wizard”這些字眼全部替換掉空格或者其它信息,自己決定。(注意:安裝還有卸載的時候,進入的第一個界面還有最后退出的界面的”InstallShield Wizard”是去不掉的,因為去掉這些字眼本來就違反了IS的協(xié)議,你用別人的東西,肯定要標記一下別人公司的標志)
?
2.?點擊 Organization
設置Feature(組件)的安裝類型
在制作簡單的安裝軟件的過程中,已經提到過類型安裝:Minimal,Custom,Typical .
選擇 Setup Types, 你會發(fā)現(xiàn)無論點擊這三個中的任何一個,DefaultFeature都是必選的。
3.?點擊 Application Data
如何添加我要打包的文件到工程中
選擇Files and Folders,點擊右邊的***[INSTALLDIR]這個文件夾,然后在“Source compuoter’s floders”選中你要加入的文件夾,右邊的“Source computer’s files”框欄中就顯示這些文件,把這些直接拉到“Destination computer’s files”中。(注意:如果發(fā)現(xiàn)拉入的文件不對,想要刪除,則不能在這里刪除,而要到Organization->Components下把文件刪除,這樣才能刪的徹底,否則會出錯。另外,加入好文件后,全選這些文件,右擊打開屬性,選擇”Always Overwrite”,這樣可以強制覆蓋安裝。)
4.?點擊 System Configuration
如何建立桌面和開始程序的快捷方式
?
像上面圖片一樣,建完快捷方式后,記得把每個快捷方式的”Working Directory”設置為”[INSTALLDIR]”.否則會出錯。
5.?點擊 Behavior and Logic
怎么定制安裝和卸載過程出現(xiàn)的界面
點擊Install Script, IS 的installscript在安裝的時候首先調用的是OnFirstUIBefore 函數(shù),卸載的時候首先調用的是 OnMaintUIBefore 函數(shù),這兩個函數(shù)都在 Before Move Data. 而在安裝結束時調用的函數(shù)是 OnFirstUIAfter 函數(shù),而卸載結束的時候調用的是 OnMaintUIAfter.
如何在卸載的時候不彈出“修改”“修復”“刪除”的界面,直接進入刪除
在OnMaintUIBefore函數(shù)中,從Dlg_Start到Dlg_SdFeatureTree之間的代碼全部注釋,然后加上nType = REMOVEALL;
如何除去安裝和卸載過程中標題中的“InstallShield Wizard”字眼
安裝和卸載過程中,第一個出現(xiàn)的界面和最后退出的界面標題的字眼是無法去除的,或者說我不知道怎么去吧,哈…其它界面上的標題可以通過:在OnFirstUIBefore中添加:SetTitle(“安裝”+IFX_PRODUCT_NAME,0,BACKGROUNDCAPTION); 卸載也是一個道理,添加以上語句的函數(shù)是:OnMaintUIBefore
怎么用腳本創(chuàng)建一個卸載快捷方式,如何“完美卸載”
IS自帶的建立卸載快捷方式(Project A Assistant -> Application Shortcuts -> Create an uninstallation shortcut)是有問題的,會出現(xiàn)卸載不完全的現(xiàn)象。解決方法是寫腳本:
Install Script -> After More Data -> OnFirstUIAfter 中添加:
STRING szFile;
NUMBER nResult;
szFile = UNINSTALL_STRING + “/UNINSTALL”;
nResult = StrFind(szFile,”.exe”);
if(nResult >= 0) then
StrSub(szMsg1, szFile, 0, nResult + 4);
StrSub(szMsg2, szFile, nResult + 4, 200);
LongPathToQuote(szMsg1, FALSE);
LongPathToQuote(szMsg2, FALSE);
szFile = “\” + szMsg1 + “\” + szMsg2;
??????? endif;
??
??AddFolderIcon(FOLDER_PROGRAMS ^ “AliProbe”, “Uninstall AliProbe”, szFile, WINDIR, WINDIR ^ “System32\\msiexec.exe”, 0, REPLACE);
???
??然后在OnMaintUIAfter()中添加:
??// 刪除開始所有程序中的AliProbe文件夾
??DeleteProgramFolder(“AliProbe”);
??
??// 刪除桌面上的快捷方式
??STRING szItemName = “AliProbe”;
??STRING szProgramFolder = FOLDER_DESKTOP;
??DeleteFolderIcon(szProgramFolder, szItemName);
??
??// 刪除安裝目錄文件夾
??DeleteProgramFolder(TARGETDIR);
??
??向注冊表寫入安裝路徑
prototype AliprobeReg(); //聲明函數(shù)
function AliprobeReg()???
number nRootKey,nType,nSize;
string szKey,szNumName,szNumValue,szClass;
begin?????
??//修改注冊表
??nRootKey = HKEY_LOCAL_MACHINE;
??RegDBSetDefaultRoot (nRootKey);???? //置根為nRootKey?
??//注冊子項
??szKey="SOFTWARE\\Aliprobe\\";
??if RegDBKeyExist(szKey) < 0 then??? //不存在“SOFTWARE\\Aliprobe”,創(chuàng)建這個項
??? ?RegDBCreateKeyEx(szKey,"");
??endif;
??//初始化每個鍵的公共值
??nType=REGDB_STRING;
??nSize=-1;
??//注冊安裝路徑
??szNumName="PATH";
??szNumValue=TARGETDIR;
??? RegDBSetKeyValueEx(szKey,szNumName,nType,szNumValue,nSize);
end;
在OnInstallFilesActionAfter()中調用上面的函數(shù)。
安裝結束后啟動進程和readme文件
在OnFirstUIAfter()中添加:
szMsg1 = "AliProbe已經安裝完成";
??? szMsg2 = "";
?bOpt1? = TRUE;
?bOpt2? = TRUE;
?szOption1 = "打開readme文件";
//?szOption2 = "啟動Aliprobe";?????
?szOption2 = "";
?nResult = SdFinish(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2);???
?
?if(bOpt1) then????
??? ?if(FindFile(TARGETDIR, "readme.txt", szFile) = 0) then
??? ??LaunchApp(WINDIR^"Notepad.exe", TARGETDIR^"readme.txt");
??? ?endif;
??? endif;
????
??? if(bOpt2) then
??? ?if(FindFile(TARGETDIR, "AliProbe.exe", szFile) = 0) then
??? ??LaunchApp(TARGETDIR^"AliProbe.exe", "");
??? ?endif;??????
??? endif;?
6.?點擊 Media
對于小版本,提示覆蓋安裝
當小版本更新的時候,由于Product Code沒有更改,所以,必須設置讓它提示升級安裝。選擇Upgrades -> Upgrade Window Installer Setup ,選擇Common ,勾上 prompt
如何更改安裝包的名字,不要默認的Setup.exe
Release -> PROJECT_ASSISTANT?
?
修改Setup file name就可以了。另外,Product Name 和 Product Version 也要做相應的修改,Product Code 和 Upgrade Code 要保持和 General Information -> Product Properties的Product Code 和 Upgrade Code 要保持一致,否則會出現(xiàn)卸載失敗。
五.其它細節(jié)注意。
1. Cannot rename directory 或 Error Code = -1014
關閉工程release的目標文件夾,即**/**/../Disk,這個文件夾,此時很有可能因為它開著而導致錯誤。
總結
以上是生活随笔為你收集整理的又一打包工具介绍:Installshield 打包安装包心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 排序算法介绍和分类
- 下一篇: python 消息队列 get是从队首还