摘要:在應(yīng)用環(huán)境中發(fā)布C/S結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用系統(tǒng)時,要面臨一些共性問題。文章以Delphi開發(fā)的數(shù)據(jù)庫應(yīng)用程序為例,詳細(xì)說明了如何使用InstallShield向客戶端裝載必要的系統(tǒng)模塊、進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)庫的配置以及更改注冊表注冊信息的方法。使用Delphi編制的數(shù)據(jù)庫應(yīng)用系統(tǒng)一般會采用ADO或BDE模式,文章特別介紹了使用ADO模式的Delphi程序的打包過程和注意事項。
關(guān)鍵詞:InstallShield;ADO;Delphi;C/S;數(shù)據(jù)庫
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2009)26-7350-03
Distributing C/S Structure Application Program Technology Based on Delphi
ZHUO Qing-xia1, MENG Fan-you1, LI Man-li2
(1.Information Center of No.10 Oil Production Company of Daqing Oilfield Limited Company, Daqing 166405, China; 2.Well Logging Technology service Company NO.10 brigade of Daqing Oilfield Limited Company, Daqing 166405, China)
Abstract: Distributing C/S structure database application program in the system must face some common problems .The paper give a detailed description on how to install necessary modules to the client using InstallShield ,configure the database in network, modify register by a database application developed by Delphi as an example .As Database Application System developed by Delphi always based on ADO or BDE ,the paper describes the progress and the notes of packing the program based on ADO in particular.
Key words: InstallShield; ADO; Delphi; C/S; database
應(yīng)用程序的發(fā)布是一個軟件系統(tǒng)完成的重要標(biāo)志,B/S結(jié)構(gòu)的應(yīng)用程序發(fā)布相對C/S結(jié)構(gòu)軟件要簡單一些,只需在服務(wù)器上構(gòu)建網(wǎng)站即可。C/S結(jié)構(gòu)數(shù)據(jù)庫應(yīng)用程序在開發(fā)完成后進(jìn)行發(fā)布時往往要面臨更多的問題,如應(yīng)用程序數(shù)據(jù)的指定(程序相關(guān)文件、組合模塊(.DLL文件等))、如何設(shè)置個性安裝界面、如何配置目標(biāo)計算機注冊信息以及如何使用腳本自定義功能等。
1 使用InstallShield發(fā)布C/S結(jié)構(gòu)數(shù)據(jù)庫應(yīng)用系統(tǒng)
InstallShield是目前最流行的制作安裝程序的工具軟件,它所內(nèi)建的腳本語言InstallScript使得用戶可以像其他高級語言那樣靈活地構(gòu)造出自己的安裝腳本程序來。通過對待發(fā)布軟件進(jìn)行模式分析和必要文件分類、整理,對InstallShield進(jìn)行一系列屬性和腳本語言編輯設(shè)計,就可以方便的在用戶環(huán)境中發(fā)布實施C/S結(jié)構(gòu)數(shù)據(jù)庫應(yīng)用系統(tǒng)。下面以Delphi開發(fā)的數(shù)據(jù)庫應(yīng)用程序《大慶油田聲像檔案應(yīng)用系統(tǒng)》為例,詳細(xì)說明如何對基于ADO+SQL Server2000模式的開發(fā)程序進(jìn)行打包分發(fā)。
1.1 ADO+SQL Server模式Delphi程序的安裝程序組織要素
1)使用Delphi 7開發(fā)的應(yīng)用程序都需要使用Borlndmm.dll和CC3260MT.dll這兩個動態(tài)鏈接庫文件,應(yīng)事先挑出來,這兩文件都存放在安裝路徑下的..\\bin文件夾中。
2)在編制《大慶油田聲像檔案應(yīng)用系統(tǒng)》時會使用QuickReport組件進(jìn)行報表模塊的開發(fā),這是第三方組件。在Delphi 7中安裝第三方組件后通常都會生成一個.bpl文件(這是VCL專用的動態(tài)鏈接庫文件格式),庫文件通常和組件安裝程序.bpr的文件名相同。QuickReport組件庫為dclqrt.bpl,原始路徑在Delphi7安裝..\\Projects\\bin下。編譯后的程序文件數(shù)目少而精,主要有應(yīng)用軟件、用戶說明、初始化配置文件yx_da.ini以及照片檔案無鏈接時的圖片顯示文件。
3)SQL Server2000數(shù)據(jù)庫客戶端存取的網(wǎng)絡(luò)支持庫文件
如果沒有客戶端網(wǎng)絡(luò)支持庫,客戶端應(yīng)用程序無法訪問SQL Server服務(wù)器。不同的網(wǎng)絡(luò)協(xié)議使用不同的動態(tài)鏈接庫文件,可以打開SQL Server2000程序組中的“客戶端網(wǎng)絡(luò)實用工具”來查看庫文件,實際環(huán)境中需要的庫文件都存放在操作系統(tǒng)的..\\system32文件夾中,其中,相對來說最為重要的是數(shù)據(jù)庫訪問驅(qū)動程序庫文件Ntwdblib.dll(對話框中選擇“DB-Library選項”選項卡可查看該文件名)。
注意:1)在創(chuàng)建正式發(fā)布的安裝程序之前,一定要在Delphi7中選擇Project|Options|Compile對話框,勾除Debugging組合框中的所有程序調(diào)試選項,重新構(gòu)建應(yīng)用程序[2]。這樣可減小應(yīng)用程序的大小,同時還去除了應(yīng)用程序中包括的調(diào)試信息,保證代碼安全。
2)Delphi7特有的安裝分發(fā)組件包(運行時庫的分發(fā)組合模塊)在其安裝路徑下的..\\MergeModules文件夾中,應(yīng)將該文件夾中的所有文件都復(fù)制到InstallShield安裝路徑下的..\\Modules\\i386文件夾中(事先請備份,以便能夠使用InstallShield制作不同開發(fā)環(huán)境下開發(fā)出來的應(yīng)用程序開發(fā)程序)。如果在打開InstallShield Developer之前沒有將Delphi7提供的組合模塊復(fù)制到InstallShield Developer的組合模塊路徑下,打開InstallShield Developer后,對象/組合模塊列表將不會顯示Delphi 7的組合模塊。否則,可通過Application Data→Redistributables→選擇Merge Module查看系統(tǒng)支持的組合模塊。
組合模塊(可.msm文件)包含了所有需要安裝的邏輯和文件,而不是部分功能。例如,許多應(yīng)用程序都需要使用Visual Basic的運行時DLL文件,在制作安裝程序時,只需要將Visual Basic的虛擬機組合模塊指定給安裝包工程中的某個功能即可,而不需要將文件包含到某個組件中(同時還需估算出該文件的安裝需求)。
制作安裝程序時要注意組合模塊的排他性和依賴性。某些模塊依賴于其它模塊才能正常工作,因此在定制依賴模塊時,InstallShield Developer會自動在模塊源路徑列表中搜索該模塊的依賴對象并關(guān)聯(lián)到安裝的模塊上。相反,如果新增的關(guān)聯(lián)模塊具有排他性,則InstallShield會自動從安裝程序中刪除需要排除的模塊。
1.2 設(shè)置個性安裝界面
在InstallShield中設(shè)置個性安裝界面主要設(shè)置以下屬性:
1.2.1 [General Information]→Product Properties設(shè)置
Name:產(chǎn)品名稱,即安裝程序文件的名稱。在使用安裝包工程的所有地方都要使用該屬性值,包括:安裝包工程的文件名稱、最終構(gòu)建的安裝程序的文件名、安裝過程的安裝界面中、Windows標(biāo)識要求相關(guān)的注冊鍵值中以及在控制面板的“添加/刪除”程序中都使用它來標(biāo)識程序文件。
Version:產(chǎn)品的版本標(biāo)識。版本格式一定是三段式(新版本為1.00.0000樣式),分別代表主版本號,次版本號和構(gòu)建版本號。主版本號和次版本號必須小于255,而構(gòu)建版本號小于65535。安裝程序時,Windows標(biāo)識規(guī)范要求必須提供主版本號和次版本號,這樣才能注冊程序。Windows的安裝程序要使用版本號的部分值來確定是否應(yīng)用補丁[1]。
Product Code:產(chǎn)品的標(biāo)識號碼,全球唯一標(biāo)識號碼,操作系統(tǒng)注冊程序時需要使用該號碼來標(biāo)識產(chǎn)品。使用Generate GUID按鈕生成新的號碼[3]。INSTALLDIR(Default Product Destination Folder):安裝應(yīng)用程序文件的默認(rèn)目的文件夾。也就是說,在安裝時,這里指定的INSTALLDIR屬性值將被指派給Windows Installer的文件夾屬性INSTALLDIR,INSTALLDIR屬性值是產(chǎn)品的所有功能和組件等文件的默認(rèn)安裝位置。Windows標(biāo)識規(guī)范要求,無論目標(biāo)系統(tǒng)使用什么語言,必須將應(yīng)用程序的文件安裝到\\Program Files文件夾的子文件夾中。如果產(chǎn)品的安裝目標(biāo)文件夾的父文件夾使用[ProgramFilesFolder],那么產(chǎn)品的文件就能夠安裝到正確的位置中。INSTALLDIR屬性的初始值是[ProgramFilesFolder] \\Your Company name\\Default,中括號中的文件夾是系統(tǒng)文件夾,其具體值因系統(tǒng)安裝的位置或安裝的操作系統(tǒng)不同而不同。可從INSTALLDIR屬性的下拉列表框中選擇其他的系統(tǒng)文件夾。
建議:為了遵循Windows標(biāo)識規(guī)范,最好將應(yīng)用程序的默認(rèn)安裝路徑的父路徑指定為[ProgramFilesFolder],將各功能的安裝路徑指定為[INSTALLDIR],這樣可確保產(chǎn)品能被正確安裝到目標(biāo)系統(tǒng)中。
1.2.2 [Application Data]屬性設(shè)置
在Files and Folders節(jié)中,從Source computer’s folders選取源文件,拖至下方的Destination computer’s folders相應(yīng)的組件夾中,主要是[ProgramFilesFolder]和[SystemFolder]。
1.2.3 [System Configuration]→Shortcuts屬性設(shè)置
1)Taskbar→start Menu:建立大慶油田聲像檔案的兩個快捷方式(安裝與反安裝)。
2)Desktop中建大慶聲像檔案管理系統(tǒng)的啟動快捷方式。
要想定制自己的個性界面,需要設(shè)置上述三個快捷方式中的Display Name屬性、Icon File屬性。
2 使用InstallScript MSI腳本語言擴展安裝功能
當(dāng)用戶要實現(xiàn)一些特殊的安裝功能,如要求安裝程序在安裝完成后顯示提示框,詢問是否顯示Readme文件,這就要用到InstallScript MSI腳本語言來進(jìn)行功能擴展。
InstallShield腳本語言是類C語言,提供了大約250個函數(shù)來處理相關(guān)任務(wù)。腳本語言采用的事件驅(qū)動模式,即所有的函數(shù)調(diào)用是安裝一定的順序來進(jìn)行的。
工程中自己定義的函數(shù)都會出現(xiàn)函數(shù)樹上,通過單擊樹上函數(shù)名稱來編輯或者修改該函數(shù)。 系統(tǒng)的事件處理函數(shù)(event-handler functions)并不會出現(xiàn)函數(shù)樹上[4],但是這些函數(shù)在安裝工程可以選擇使用,也可做修改以適應(yīng)用戶的特殊安裝需求。
InstallScript腳本語言的封裝性與模塊化隨著版本的升級逐漸進(jìn)步。在InstallShield 5.0以下創(chuàng)建應(yīng)用程序快捷方式必需通過腳本語言,而在InstallShield 5.1以上版本則可以在Resource窗口中建立。例如,在2003年編制的《采油十廠計算機及外設(shè)信息管理系統(tǒng)》,即使用InstallShield 5.0制作安裝程序,其中自編制了兩個函數(shù)SetupRegistry()和SetupFolders()用以實現(xiàn)ODBC方式數(shù)據(jù)庫注冊與連接、目標(biāo)系統(tǒng)快捷方式的建立。隨著版本的更新?lián)Q代,系統(tǒng)注冊、簡單數(shù)據(jù)庫連接以及目標(biāo)系統(tǒng)快捷方式的建立已經(jīng)逐步可在模塊中設(shè)置完成而無需編制代碼了。但是隨機性較強或是較特殊的功能依然需要我們自己動手編制代碼才能完成。例如,在2007年使用InstallShield 10.5打包《大慶油田聲像檔案應(yīng)用系統(tǒng)》單機版時,僅編制了一個函數(shù)DialogShowSdFinishReboot()用于在安裝結(jié)束后詢問是否瀏覽用戶使用手冊。
3 結(jié)論
本文以實例介紹了如何應(yīng)用InstallShield發(fā)布ADO+SQL Server模式Delphi程序。從上述可以看出,如果想使用InstallShield創(chuàng)建方便快捷的安裝包工程,必須對自己應(yīng)用軟件的開發(fā)模式和依賴模塊有較深的認(rèn)識,并且對InstallShield的打包原理、安裝程序的組織方式、目標(biāo)系統(tǒng)的配置方法以及用于自定義功能的腳本語言的編寫都要有一定的掌握。只有這樣,才能在目標(biāo)機器上實現(xiàn)專業(yè)而簡捷有效的應(yīng)用軟件安裝過程。
參考文獻(xiàn):
[1] 潘文林.數(shù)據(jù)庫應(yīng)用系統(tǒng)產(chǎn)品開發(fā)實戰(zhàn)SQL Server2000DelphiInstallShield[M].北京:中國水利水電出版社,2005:391,421-423.
[2] 安富國,孫以義,石玉琢.Delphi程序設(shè)計專家門診[M].北京:清華大學(xué)出版社,2005:266.
[3] 趙萬軍,王興東.Delphi軟件項目開發(fā)實例[M].北京:電子工業(yè)出版社,2004:219-230.
[4] 曹洋.Delphi 7經(jīng)典問題解析[M].北京:中國水利水電出版社,2003:276.