国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

PB8.0應用程序編譯發布技術研究

2024-07-21 02:10:00
字體:
來源:轉載
供稿:網友

  摘要:本文主要討論基于windows平臺的powerbuilder 8.0應用程序編譯發布關鍵問題和解決方法,包括執行文件的建立、資源文件的創建、安裝程序的建立及添加數據源和sql anywhere 數據庫移動處理等問題。關鍵字:軟件開發、powerbuilder 8.0、應用程序發布、setup程序制作 。

       引言

  powerbuilder+odbc+sql anywhere是目前開發數據庫應用程序非常流行的模式。但powerbuilder本身僅是一個開發工具,當一個應用程序被開發并完成調試后,我們還需對其建立可執行文件并移植到終端用戶的機器上,其中odbc的配置和sql anywhere的安裝是難點,本文論述基于windows平臺的powerbuilder 8.0應用程序編譯發布關鍵技術問題和解決辦法。

  執行文件的建立

  1、編譯格式的選擇

  powerbuilder 8.0對生成可執行文件提供了兩種編譯格式:偽代碼(pcode,即pseudocode的縮寫)和機器代碼(machinecode)。偽代碼是一種在所有powerbuilder 平臺上支持的解釋性語言,它的格式與powerbuilder 運行庫(.pbl)一樣,在可執行狀態下保存單個對象,其優點是方便和可移植;機器代碼則是真正的完全脫離powerbuilder 環境的可執行文件,其優點是速度快,但文件容量比較大。選擇編譯代碼格式一般基于以下三個方面:

  ①速度。若目標是優化運行速度和應用強化腳本處理,則選擇機器代碼。要是代碼中較多地使用了循環結構、浮點運算或整數算法及函數調用,機器代碼將比偽代碼做得更好。但偽代碼的編譯速度比機器代碼快,特別是開發人員要快速地創建測試用的可執行文件時非常便利;

  ②大小。偽代碼生成的文件比機器代碼的小。如運行應用程序的終端機器容量緊張的話,就需要放棄較快的機器代碼而選擇偽代碼;

  ③移植。偽代碼對于跨平臺的應用非常有用。它可以方便地跨平臺(powerbuilder 支持)使用,包括:microsoft windows (16位和32位)、applemacintosh和unix。機器代碼是依賴于平臺的,也就是說要求生成和可執行應用平臺一致,不過它可以獲得更好的性能。

  2、動態庫的建立

  發布powerbuilder 8.0應用可以將一些對象不放到可執行文件中,而放到動態庫中在運行時裝入,這樣可以將應用程序分割成更小的模塊便于管理和維護。

  選擇偽代碼(pcode)編譯方式生成powerbuilder動態庫(.pbd文件),選擇機器代碼(machinecode)方式在windows和unix平臺上生成動態鏈接庫(.dll文件,如將test.pbl編譯成test.dll),在machine平臺上生成平臺支持的共享庫(如test.lib)。如果在windows上有兩個應用,那么編譯成的.pbd包含一個調用全局外部函數的用戶對象,為了保證正確調用函數必須為每個應用單獨編譯和發布.pbd文件。

  當建立動態庫時,將源庫(.pbl文件)中所有對象的編譯版本拷貝到動態庫中。為了在某些庫中只使用所需的對象,可以將它們放到一個標準的powerbuilder庫(.pbl)中。

  在建立動態庫時,powerbuilder并不檢查所有對象,只是簡單地去掉對象的源格式,因此,對于一些在畫筆或腳本中指定了使用資源(圖形、圖標或指針)的對象,若不想提供單獨的資源,則必須在資源文件(.pbr)中羅列出這些資源,這樣才能保證在建立動態庫時包含這些資源。

  動態庫的建立有兩種途徑:一是在庫管理畫筆中建立;二是在工程畫筆中建立工程對象時一起建立。

  3、資源文件的使用

  可執行文件或動態庫中可以包含一些資源(圖形、圖標或指針),也可以將它們作為單獨的資源文件(.pbr文件)保存。

  (1)單獨的分布資源

  若某資源不包含在可執行文件或動態庫中,則在執行應用程序引用它時,powerbuilder按查詢路徑查找該資源,因此,必須將它與應用程序一起放在查詢路徑下。

  windows的查詢路徑為:當前目錄,windows目錄,windows的system目錄和path環境變量中設置的所有目錄。

  (2)資源文件

  可以使用powerbuilder資源文件(.pbr)替代單獨的資源,其中列出所有的動態分配的資源也可以包含動態分配的數據窗口對象。powerbuilder將這些資源編譯后放入可執行文件或.pbd文件中,這些資源在執行時可直接使用。

  若給數據窗口控件動態分配數據窗口對象,則必須創建一個資源文件,且在可執行文件或動態庫文件中包含該對象,或在一個單獨的動態庫中包含它。

  資源文件(.pbr)是一個ascii碼文件,在其中列出了應用程序要有到的各種資源(如.bmp、.cur、.ico、.rle和.wmf文件)和數據窗口對象。使用文本編輯器(如windows的記事本)創建一個文本文件,其中列出在應用中動態引用的資源文件,一行列出一個資源,格式如:

appico.ico
appbmp1.bmp
appbmp2.bmp
……

  以上文件和對象都假設是在當前目錄中,如果存在于另一個目錄中,則必須包含所在路徑,格式如:

e:/myapp/test.jpg。

  在.pbr文件中指定的文件名必須與在腳本中引用的資源匹配,若引用時包含路徑,則在.pbr文件中也必須包含同一路徑,否則因powerbuilder在執行時只是簡單地進行字符串比較而導致無法發現該資源。

  若應用程序中包含有動態引用的數據窗口,則在.pbr文件中必須包含數據窗口對象,格式如:

myapp.pbl(dw_infodisplay)

  其中:myapp.pbl為應用程序庫,dw_infodisplay為數據窗口對象,一般是在當前目錄或指定路徑。在執行時,若引用資源,powerbuilder首先檢查可執行文件,找不到再在.pbd文件中、文件查詢路徑的目錄中查找。

  在工程畫筆中建立工程對象時可以為可執行文件或每一個動態庫指定它使用的資源文件,也可以在庫管理畫筆中建立動態庫時使用。

  配置powerbuilder 8.0應用程序

  一般來說發布一個powerbuilder 8.0應用程序,除提交應用程序可執行文件(.exe)、應用程序的動態庫(.pbd或.dll)外,還應包含如下文件:

  1、powerbuilder 8.0應用程序運行時的支持文件

  powerbuilder 8.0應用程序運行時的支持文件(.dll)應放在與應用程序相同的目錄中或放在搜索路徑中的目錄中。

  以上文件可以在c:/program files ybase hared/powerbuilder取得。

  2、數據庫接口

  所有數據庫接口文件及驅動程序(pbtra80.dll、pbodb80.dll和pbodb80.ini)必須放在應用程序目錄或系統目錄中。

  以上文件可以在c:/program files ybase hared/powerbuilder取得。我們把他們復制到應用程序目錄或系統目錄中。如果使用專用數據庫接口以及activex,所需復制的文件參考powerbuilder的onlinebook。

  3、microsoft odbc驅動程序和dlls

  ds16gt.dll,ds32gt.dll,odbc32.dll,odbc32gt.dll,odbcad32.exe,odbccp32.cpl,_
  odbccp32.dll,odbccr32.dll,odbcinst.cnt,odbcinst.hlp,odbcint.dll,odbctrac.dll

  以上文件可以在window的系統目錄system32取得,具體路徑隨操作系統不同而不同。我們把他們復制到應用程序目錄或系統目錄中。

  4、adaptive server anywhere的odbc數據庫驅動程序及其支持文件
pbbas15.dll,pbflt15.dll, pbutl15.dll,pbtrn15.dll,ivpb.lic,pbdrv15.cnt,pbdrv15.hlp。

  以上文件可以在c:/program files ybase hared/merantodbc取得,我們把他們復制到應用程序目錄或系統目錄中。

  5、adaptive server anywhere運行系統文件

dbodbc7.dll,dbbackup.exe,dbcon7.dll,dbisqlc.exe,dblgen7.dll,dblib7.dll,dbodtr7.dll,_
dbtool7.dll,dbunload.exe,dbvalid.exe,dbeng7.exe,dbctrs7.dll,dbserv7.dll,dbwtsp7.dll。

  以上文件可以在c:/program files ybase ql anywhere 7/win32取得,我們把他們復制到應用程序目錄或系統目錄中。

  6、ole系統文件

  如果應用程序中使用了ole控件,那么終端用戶的機器上應該有ole系統文件,它們是:
compobj.dll,ole2nls.dll,ctl3dv2.dll,ole2prox.dll,ole2.dll,storage.dll,ole2conv.dll,_
typelib.dll,ole2disp.dll,tdole.tlb

  若它們不存在的話,我們把他們復制到應用程序目錄或系統目錄中。

  以上所列的所有支持文件不一定全部要把他們復制到應用程序目錄或系統目錄中,具體可根據情況靈活決定。在發布應用程序之前,為確定都需要包含哪些動態鏈接庫,一種比較可行又可靠的方法是:

  (1)將生成的應用程序拷貝到另一臺未裝過powerbuilder的計算機上并運行它。

  (2)找出應用程序提示的因找不到而不能運行的那個動態庫。

  (3)從開發該應用程序的機器上將相應的動態庫文件拷貝過來。

  (4)重復(2)(3)兩步,直到所有動態鏈接庫都包含進來。

  安裝程序的制作

  在windows平臺上開發的應用程序不能象在dos環境下經過簡單的copy就可發布和安裝。因此,制作一個安裝程序(setup)就成為windows平合應用程序發布的必不可少的重要一步。

  1、setup的基本功能

  setup程序的唯一目的就是安裝應用程序,應該由它來完成對安裝過程的處理,setup程序應具備以下基本功能:

  (1)傳送文件。將需要安裝的應用程序及有關的支持文件傳送到目標機器上,并處理傳送過程中的錯誤。此乃setup程序最基本的功能。

  (2)詢問終端用戶有關必要的信息,如用戶名、產品序列號、目標路徑等,并響應用戶輸入。

  (3)給用戶以改變想法的機會,如改變安裝路徑、取消安裝等。

  (4)注冊表訪問。如設置應用程序查找路徑鍵、創建應用程序信息鍵等。

  (5)卸載功能,對安裝的文件及對注冊表的設置應有卸載登記功能,以便用戶在取消安裝或在不需要時順利卸載應用程序并改回注冊表。

  (6)安裝完畢應給用戶以完成提示。

  2、應用程序的安裝規則

  當把應用程序安裝到機器上時,有許多規則應當遵從,其中大多數是常識性的。它們使用戶的應用程序維護更加容易,而且較少產生由文件復制而引起的問題。

  (l)應避免把任何文件拷貝到系統目錄中,除非正在升級由外部的應用程序使用的常用文件(例如,odbc或本機數據庫驅動程序)。這有助于避免由于改變了這些區域的文件而使操作系統的性能降級。

  (2)如果文件是一個僅在單個用戶的應用程序之間共享的通用文件,就應在program files的子目錄common files中建立一個入口。

  (3)在 windows中,應把用戶自己的應用程序放在program flies下自己的目錄中。

  (4) 對于 windows應把支持文件( .hlp、.dll等)分布在稱為system用戶自己的應用程序的一個子目錄中。然后將它的位置注冊在應用程序的hkey_localmachine oftware入口處的apppaths子鍵的注冊表中。

  (5)應使用注冊表存儲有關應用程序的所有必需信息,而不應該修改system.ini、win.ini或應用程序的ini文件。

  (6)在操作系統的啟動引擎中制作一個入口,提供對用戶應用程序的訪問。對于windows,應把應用程序的一個快捷圖標放在桌面或在開始菜單的程序文件夾中。

  (7)用戶放在系統目錄中的任何文件都應注冊于hkey_localmachine的sharedll子鍵中。

  3、安裝程序制作工具的選擇

  installshield是installshield軟件公司開發的著名的安裝程序制作軟件。installshield提供了易于使用的向導和一個集成環境來幫助創建應用程序安裝程序。但是installshield的使用比較復雜,installshield并不是自由軟件,而是一個有版權的商業化軟件。絕大部分powerbuilder 8.0書籍資料在談及發布應用程序時極其簡單地提示使用installshield制作安裝程序。而介紹installshield使用的資料又非常少。因而常會碰到不少困難。

  在制作中安裝程序時比較常用的安裝制作工具是createinstall 2000。它是一個共享軟件,支持中文。能在www.gentee.com下載到。沒有注冊的話會在制作好的安裝盤運行時出現提示信息,但是功能是沒有限制的。

  另一個比installshield更加方便好用的安裝制作工具是gp-install。gp-install是一個用delphi編制的自由軟件。雖然是自由軟件,但不是說它的功能就比較少,或者不夠強。正好相反,一個安裝軟件應該有的功能它一個不少,而且相當方便、實用。整個軟件安裝以后大約有2m,只是installshield的零頭。installshield有的功能gp-install基本都有,生成的安裝程序界面也非常相似,但gp-install更加讓人感到親切。gp-install還有一個最大的特點就是允許生成帶有多國語言的安裝程序,在一個安裝程序中就包含了多種國家的語言,并且你在安裝時選擇了什么語言,在反安裝(卸載)時也會顯示出什么語言。這對于希望把自己的程序向其他國家、地區推廣的程序員來說是非常有用處的。gp-install主頁:http://www.qsc.co.uk,你可以在那里下載一個最新的版本,目前最新版本是5.0.2.57。

  其它還有一些比較常用的可用來制作安裝程序的軟件有setup factory 等。

  4、添加注冊表信息

  這是最關鍵的!涉及到odbc的安裝和數據源的配置。千萬不能搞錯,否則前功盡棄。

  添加注冊表信息的方法有兩種:

  (1) 直接添加,主要見于手工添加數據源或創建安裝程序時。一般只須對下列項進行設置即可:

根鍵 子鍵 值名稱值hkey_current_user software/odbc/odbc.ini/demo(替換成你自己的數據源名稱)autostop yeshkey_current_user同上databasenamedemo(替換成你自己的數據庫名稱)hkey_current_user同上databasefiledemo.db(替換成你自己的數據庫文件)hkey_current_user同上driverc:/program files ybase ql anywhere 7/win32/dbodbc7.dllhkey_current_user同上pwdsqlhkey_current_user同上uiddba
  有時還須對下列項進行設置:

根鍵子鍵值名稱值hkey_current_user software/odbc/odbc.ini/demo(替換成你自己的數據源名稱)description我的數據庫(替換成你對自己數據庫的描述,可以是中文)hkey_current_user同上enginename我的數據庫(替換成自己的數據引擎描述,可以是中文)hkey_current_user同上startc:/program files ybase ql anywhere 7/win32/dbeng7.exe -c 8m,0hkey_local_machinesoftware/odbc/odbc driversadaptive server anywhere 7.0installedhkey_local_machinesoftware/odbc/adaptive server anywhere 7.0 driverc:/program files ybase ql anywhere 7/win32/dbodbc7.dllhkey_local_machine software/odbc/adaptive server anywhere 7.0setupc:/program files ybase ql anywhere 7/win32/dbodbc7.dllhkey_current_usersoftware/odbc/odbc.ini/odbc data sources你自己的數據源名稱如:demo adaptive server anywhere 7.0hkey_local_machinesoftware/microsoft/windows/currentversion/app paths/myapp.exe(替換成自己的可執行文件名)pathc:/program files ybase hared/powerbuilder;
c:/program files ybase ql anywhere 7/win32/;c:/program files ybase hared/merantodbchkey_local_machine software/microsoft/windows/currentversion/app paths/myapp.exe(替換成自己的可執行文?defaultmyapp.exe(替換成自己的可執行文件名)
  以上各項為注冊可執行文件和搜索路徑。你也可以改變為另外的路徑。具體情況在制作安裝程序時靈活決定。

  (2) 在powerbuilder中用程序來動態添加odbc數據源,主要是利用 powerbuilder對注冊表操作函數 registryset(),再就是利用 powerbuilder的profilestring()函數和setprofilestring()函數讀取和設置ini配置文件中預先定義好的參數。

   registryset( key,valuename,valuetype,value)

  功能:在powerbuilder程序中設置注冊表中的信息。

  key表示主鍵; valuename表示鍵值名; valuetype表示鍵值類型;value表示鍵值。

   profilestring(filename,section,key,value)

  功能:在powerbuilde程序中讀取ini配置文件中的信息。

  filename表示文件名;section表示段名;key表示關鍵字;value表示關鍵字值。

   setprofilestring(filename,section,key,value)

  功能:在powerbuilde程序中設置ini配置文件中的信息。

  filename表示文件名;section表示段名;key表示關鍵字;value表示關鍵字值。

  至此,odbc和數據源就配置好了。 對不同的數據庫管理系統而言,上面的方法和語句會有所不同,但用戶可用以下方法作為用程序添加odbc數據源的依據:①在控制面板中打開odbc數據源管理器,手動添加一數據源。②運行regedit,打開注冊表編輯器,找到剛才添加的數據源,記下其各鍵值的值。③在安裝程序中或在powerbuilder程序中用 registset()函數把各鍵值的值寫入注冊表。當然,某些鍵值肯定會不同,比如數據庫的具體路徑等。

  5、數據庫文件(.db)的移動處理

  在powerbuilder 8.0中,sql anywhere 數據庫由后綴分別為.db和.log兩個文件組成,其中.db的文件是用來存放數據庫信息(包括表結構、視圖、數據等)。而.log文件是個日志文件,用來記錄用戶每一次對數據庫有影響的操作,例如創建或刪除表、視圖、觸發器等對象,插入、刪除、修改表中的數據等。當我們建立一個sql anywhere 數據庫時,除生成一個庫文件(.db)外,還默認建立相應的.log文件。

  移動sql anywhere 數據庫時首先將.db文件和.log文件一同復制,配置odbc, 再在powerbuilder中設置profile即可連通。但日志文件(.log)經常會帶來一些麻煩,使數據庫不能方便地移動到別的機器上使用。因為如果sql anywhere在創建數據庫的時候把日志文件的路徑信息存放到了數據庫中,那么你把數據庫拷貝到另外一臺機子上時,如果目錄不一樣,則數據庫就連不上了。

  一般的解決方法是:在終端用戶機器上建立一個對應的目錄。即如果在建立該庫時的.log文件路徑為:h:/pb8.0 hare/myapp.log,則在終端用戶機器上先建立一個盤號為h:的虛擬盤,再建立相應的目錄,將myapp.log拷貝到該目錄中(也可不拷,則重新建立.log日志文件),即可打開并調用數據庫了。另一種解決辦法是:重新注冊.log文件,在dos模式下進入sql anywhere 的win32目錄, 運行dblog -t x1:/path1/xxx.log x2:/path2/xxx.db。其中x1:/path1/xxx.log是生成的新.log文件要放的路徑和名稱。x2:/path2/xxx.db是你現在應用程序要使用的.db文件。注意不要搞錯了。

  一般情況下,若不是要求太高,可省略掉.log文件,即在建庫時不要附帶.log文件,這樣庫文件移動起來也就方便一些。

  突然斷電或不正常關機或你不小心操作都有可能破壞sqlanywhere的數據,由此造成很大的損失,如果只損壞了.db文件而.log還正常,則可以恢復被破壞的數據庫的的大部分數據,只要把.log文件的內容轉換成一條條的sql語句,然后再建一個空的數據庫,再執行這些sql語句,則恢復數據的問題就解決了。sybase公司提供了幾個實用程序來完成以上功能。 

  現假設數據庫系統文件分別名為myapp.db和myapp.log。如果myapp.db已被破壞。現在創建一個新的數據庫,假設文件分別名為new.db和new.log。

  用sybase提供的dbtranw.exe,db32w.exe,rtsqlw.exe等實用程序來完成恢復工作,步驟如下:

  1.dbtranw -r-k-y myapp.log db.sql // 把.log文件的內容轉換成的sql語句
  2.attrib -r myapp.db // 修改只讀文件myapp.db的屬性為可寫
  3.attrib-r myapp.log // 修改只讀文件myapp.log的屬性為可寫
  4.copy new.db myapp.db // 用新的空庫文件覆蓋被破壞的舊庫文件
  5.copy new.log myapp.log // 用新的日志文件覆蓋舊的日志文件
  6.db32w.exe -d myapp.db // 啟動數據庫sqlanywhere
  7.rtsqlw-q-c "userid=dba;password=sql " read db.sql // 執行從.log文件中倒出來的sql語句

  其中第一步的功能是把舊的日志文件轉換成sql語句,并放在一個名為db.sql的文件中,特別注意它只能在第五步之前操作,否則日志文件會被new.log所覆蓋,而導致無法恢復數據。最后一步的功能是從文件db.sql中讀取sql語句并執行,假設數據庫的用戶名為dba,而口令為sql。有關各個命令及參數據的更詳細的用法可以查看相應的幫助。注意:.log文件不能隨便刪除,否則恢復的數據就不完整。

  結束語

  本文就基于windows平臺的的powerbuilder 8.0應用程序編譯發布的關鍵問題進行了分析,并給出了詳細的解決方法,主要包括開發powerbuilder 8.0應用程序時,執行文件的建立、資源文件的創建、安裝程序的建立及添加數據源和sql anywhere 數據庫移動處理等問題。該方法并不限于powerbuilder,對其它開發工具同樣有借鑒意義。所論技術已在廣西師大計算機系研究生綜合管理系統mps開發中得到驗證。同時,該技術已應用于多個管理信息系統中,收到了良好的效果。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 科技| 托克逊县| 东安县| 江津市| 藁城市| 嵩明县| 板桥市| 滦平县| 阿拉尔市| 潮州市| 永顺县| 横峰县| 广宁县| 且末县| 新乐市| 山西省| 赤壁市| 武陟县| 东光县| 拉萨市| 道孚县| 鄂伦春自治旗| 石城县| 武定县| 凤城市| 邯郸市| 濮阳市| 蒲城县| 长治县| 辛集市| 湘潭市| 新化县| 商洛市| 郁南县| 嘉定区| 腾冲县| 龙门县| 平原县| 漳平市| 大城县| 南阳市|