1. 程式人生 > >PB8 0應用程式編譯釋出技術研究

PB8 0應用程式編譯釋出技術研究

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                  摘要:本文主要討論基於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/Sybase/Shared/PowerBuilder取得。

  2、資料庫介面

  所有資料庫介面檔案及驅動程式(PBTRA80.DLL、PBODB80.DLL和PBODB80.INI)必須放在應用程式目錄或系統目錄中。

  以上檔案可以在C:/Program Files/Sybase/Shared/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/Sybase/Shared/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/Sybase/SQL 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/software入口處的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 Yes
HKEY_CURRENT_USER 同上 DatabaseName Demo(替換成你自己的資料庫名稱)
HKEY_CURRENT_USER 同上 DatabaseFile demo.db(替換成你自己的資料庫檔案)
HKEY_CURRENT_USER 同上 Driver C:/Program Files/Sybase/SQL Anywhere 7/win32/dbodbc7.dll
HKEY_CURRENT_USER 同上 PWD Sql
HKEY_CURRENT_USER 同上 UID Dba

  有時還須對下列項進行設定:

根鍵 子鍵 值名稱
HKEY_CURRENT_USER Software/ODBC/ODBC.INI/demo(替換成你自己的資料來源名稱) Description 我的資料庫(替換成你對自己資料庫的描述,可以是中文)
HKEY_CURRENT_USER 同上 EngineName 我的資料庫(替換成自己的資料引擎描述,可以是中文)
HKEY_CURRENT_USER 同上 Start C:/Program Files/Sybase/SQL Anywhere 7/win32/dbeng7.exe -c 8m,0
HKEY_LOCAL_MACHINE software/ODBC/ODBC Drivers Adaptive Server Anywhere 7.0 Installed
HKEY_LOCAL_MACHINE software/ODBC/Adaptive Server Anywhere 7.0 Driver C:/Program Files/Sybase/SQL Anywhere 7/win32/dbodbc7.dll
HKEY_LOCAL_MACHINE software/ODBC/Adaptive Server Anywhere 7.0 Setup C:/Program Files/Sybase/SQL Anywhere 7/win32/dbodbc7.dll
HKEY_CURRENT_USER software/ODBC/ODBC.INI/ODBC Data Sources 你自己的資料來源名稱如:demo Adaptive Server Anywhere 7.0
HKEY_LOCAL_MACHINE software/Microsoft/Windows/CurrentVersion/App Paths/MyApp.exe(替換成自己的可執行檔名) Path C:/Program Files/sybase/shared/PowerBuilder;
c:/program files/sybase/SQL Anywhere 7/win32/;C:/Program Files/Sybase/Shared/MerantODBC
HKEY_LOCAL_MACHINE software/Microsoft/Windows/CurrentVersion/App Paths/MyApp.exe(替換成自己的可執行文? Default MyApp.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/share/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開發中得到驗證。同時,該技術已應用於多個管理資訊系統中,收到了良好的效果。


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述