
簡介PowerBuilder 9.0 安裝包及配套說明面向需要搭建經(jīng)典PB開發(fā)環(huán)境的高校學(xué)生、開發(fā)人員與上機(jī)考試備考者重點解決舊版工具獲取、部署及兼容性確認(rèn)等問題。壓縮包共69個文件、約282.22MB以exe、cab、ex_等安裝程序與數(shù)據(jù)組件為主輔以ini、inf、lbl等配置介質(zhì)文件以及sql腳本、txt和docx說明、教程文檔、zip組件兼顧安裝介質(zhì)完整性與后續(xù)查閱。包內(nèi)附有安裝說明并針對Windows 10環(huán)境整理了注意事項便于在課程實驗或備考前核對安裝條件。已有2454人學(xué)習(xí)下載在PB9學(xué)習(xí)與上機(jī)場景中具有一定參考價值。需要復(fù)現(xiàn)舊版開發(fā)環(huán)境、查閱常用函數(shù)或數(shù)據(jù)庫連接示例的讀者可借助文檔與腳本快速定位材料也可通過教程補充基礎(chǔ)操作與開發(fā)思路適合作為環(huán)境搭建和入門復(fù)習(xí)的資料合集。1. 一份 PowerBuilder 9.0 安裝包能解決什么問題三種還在跑老工程的現(xiàn)場接手一套十幾年前的管理系統(tǒng)源碼齊全、數(shù)據(jù)庫還在跑唯獨開發(fā)環(huán)境搭不起來這種局面在維護(hù)型項目里并不少見。PowerBuilder 9.0 安裝包下載這件事表面上是找一個幾百兆的安裝文件實際要解決的是「如何在一臺 Win10/Win11 機(jī)器上復(fù)現(xiàn)出 2003 年前后的開發(fā)環(huán)境」。它面向的人群很明確接手遺留系統(tǒng)維護(hù)的外包團(tuán)隊、要把老 PB 應(yīng)用的數(shù)據(jù)遷移到新系統(tǒng)的工程師、需要讀老 PBL 源碼做邏輯還原的人。這不是新項目選型而是一次純粹的維護(hù)性投入安裝包能不能裝、裝完能不能連庫、跑起來會不會在某個畫筆上翻車決定了后面所有工作的起點?;谶@幾個約束條件我一般按「先拆結(jié)構(gòu)、再走安裝、最后驗運行時」三步來做。2. 安裝包里到底有什么六個部件與補丁級別的甄別很多人在拿到包之后直接雙擊 setup.exe 一路回車裝完發(fā)現(xiàn) ODBC 接口沒了、示例庫連不上再回頭重裝。原因不復(fù)雜PB9 的安裝包不是一個單體程序而是六個互相獨立的部件捆在一起組件勾選頁面一旦默認(rèn)取消掉項后面就得靠補裝才能補回來。所以動手之前先看清包里到底裝的是什么比裝快十分鐘更重要。2.1 六個部件與它們各自的職責(zé)一個完整的 PB9 安裝介質(zhì)解壓出來常見結(jié)構(gòu)大致是這樣的PB9/ ├─ setup.exe 安裝引導(dǎo)程序InstallShield 打包 ├─ DISK1/ … 主安裝數(shù)據(jù) ├─ SHARED/ 共享組件ODBC 驅(qū)動、幫助、注冊工具 ├─ ASA/ 本地數(shù)據(jù)庫引擎與示例庫 └─ DOC/ 聯(lián)機(jī)幫助與示例代碼對應(yīng)的功能部件可以按下面這張表來理解裝不裝取決于你要干什么部件典型目錄或文件是否必裝作用PowerBuilder IDE主程序 pb90.exe必裝畫筆、調(diào)試器、PBL 庫管理數(shù)據(jù)庫 native 接口pbodb90.dll、pbmss90.dll 等按需ODBC 與各類數(shù)據(jù)庫的 PB 專用驅(qū)動ASA 本地引擎ASA 目錄建議裝自帶示例庫用于脫離生產(chǎn)庫做驗證InfoMakerIM 目錄按需報表制作老系統(tǒng)常單獨發(fā)報表工具運行時 DLLpbvm90.dll、pbdwe90.dll 等必裝編譯出的 exe 在目標(biāo)機(jī)運行所需示例與幫助Code Examples建議裝查 DataWindow 語法和舊寫法我自己的習(xí)慣是IDE、native 接口、ASA、示例代碼這四項全勾InfoMaker 看項目里有沒有 .pbl 報表需求再決定。PowerDynamo 那一類 Web 部署組件基本都是空的勾了只是多占幾百兆磁盤空間。2.2 補丁級別比安裝包版本更關(guān)鍵PB9 在生命周期里出過多個補丁級別同一個「9.0」字樣下面可能對應(yīng)不同的小版本。維護(hù)老工程時最怕的是生產(chǎn)環(huán)境跑的是打過補丁的運行時本地裝的是最初版本編譯出來的 pbd 在客戶機(jī)上直接報版本不匹配。判斷手上這份包是哪一檔裝完之后最直接的辦法是打開 IDE看 Help → About 里的版本串通常形如9.0.x (Build xxxx)。注冊表里也有一份記錄# 只讀檢查確認(rèn)安裝落點和版本鍵 $paths ( HKLM:\SOFTWARE\WOW6432Node\廠商\PowerBuilder\9.0, HKLM:\SOFTWARE\廠商\PowerBuilder\9.0 ) foreach ($p in $paths) { if (Test-Path $p) { Get-ItemProperty $p | Format-List } }這段腳本里廠商是安裝時顯示的產(chǎn)品廠商名不同打包來源寫法可能不一致所以兩個路徑都探一遍。WOW6432Node這一支必須查因為 PB9 是純 32 位程序在 64 位系統(tǒng)上安裝信息會被重定向到這里。提示把裝好的這份注冊表分支導(dǎo)出成 .reg 留檔以后換機(jī)器或者和同事對版本直接比對鍵值比肉眼翻界面快得多。2.3 拿到包先做一次校驗與歸檔下載來源不可控的時候別急著裝。先算一遍哈希和發(fā)布方提供的值對一下沒有提供值的至少把哈希記下來方便日后確認(rèn)「我這臺機(jī)器上裝的是不是同一份」。# 計算安裝包哈希并記錄到歸檔清單 $iso D:\pkg\PB9\setup.exe $h Get-FileHash -Algorithm SHA256 -Path $iso {0} {1} -f $h.Hash, $h.Path | Tee-Object -Append D:\pkg\PB9\sha256.txt-Algorithm建議用 SHA256MD5 在老資料里常見但碰撞風(fēng)險高做歸檔校驗已經(jīng)不太合適。Tee-Object -Append的作用是同一份清單可以累積多個文件以后整包遷移時一眼能看出哪幾個文件被替換過。歸檔我一般留三樣?xùn)|西原始安裝介質(zhì)的只讀副本、裝完后導(dǎo)出的注冊表分支、安裝目錄下的 pb.ini 與 pbodb90.ini。前兩個用于重裝后兩個用于排查「為什么同事的機(jī)器能連庫我的不能」——老 PB 項目里很大一部分連接問題最后都落在 ini 文件的差異上。2.4 安裝前的磁盤與權(quán)限確認(rèn)PB9 的安裝目錄最大會吃掉 1G 以上加上示例庫和幫助文檔留 3G 空間比較穩(wěn)妥。路徑本身有兩條必須遵守的限制全英文、無空格。C:\Program Files\PowerBuilder 9.0這種默認(rèn)路徑在部分老打包腳本里會被截斷成C:\Program編譯時引用資源就會莫名其妙失敗。我一般直接把根目錄定成C:\PB9短、無空格、權(quán)限簡單。權(quán)限方面安裝過程必須用管理員身份裝完之后的 IDE 首次啟動最好也用管理員跑一次讓它把用戶級的配置寫全。之后再切回普通權(quán)限使用避免長期用管理員開 IDE 帶來的文件所有者混亂。3. 在 Win10/Win11 上裝 PB9兼容模式、組件勾選與注冊表落點PB9 出廠年代對應(yīng)的是 Windows 2000/XP直接在現(xiàn)代系統(tǒng)上雙擊 setup.exe十有八九會卡在某一步要么安裝程序在「Updating System Configuration」停住要么裝完 IDE 雙擊沒反應(yīng)進(jìn)程在任務(wù)管理器里一閃就消失。這些問題都不是安裝包壞了而是兼容層沒有提前鋪好。3.1 裝之前先給安裝程序打上兼容標(biāo)記最省事的做法是給 setup.exe 單獨設(shè)兼容性而不是給整個系統(tǒng)降級。圖形界面路徑是右鍵屬性 → 兼容性 → 勾選「以兼容模式運行這個程序」并選擇 Windows XP (Service Pack 3)同時勾選「以管理員身份運行此程序」。批量部署時可以用注冊表直接寫# 給安裝程序?qū)懭爰嫒菪詷?biāo)記XP SP3 管理員 $exe D:\pkg\PB9\setup.exe $key HKCU:\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers if (-not (Test-Path $key)) { New-Item -Path $key -Force | Out-Null } $value ~ WINXPSP3 RUNASADMIN New-ItemProperty -Path $key -Name $exe -Value $value -PropertyType String -ForceWINXPSP3指定兼容層版本RUNASADMIN讓系統(tǒng)在啟動時彈 UAC 提權(quán)~是這一串標(biāo)記的分隔前綴缺了它系統(tǒng)不會識別。這條設(shè)置寫在HKCU下只對當(dāng)前用戶生效換賬戶要重寫一遍。安裝過程中如果卡在進(jìn)度條某處超過十分鐘先別急著強(qiáng)殺。打開任務(wù)管理器看setup.exe是否還有 CPU 占用完全沒有占用的話多半是安裝程序在等某個 16 位子進(jìn)程回調(diào)此時強(qiáng)殺再重來通常無效得先清掉%TEMP%下的 InstallShield 殘留目錄再裝。3.2 組件勾選頁面的取舍走到組件選擇那一步默認(rèn)勾選往往不全。按前面的部件表我的勾法是這樣的組件勾選建議不勾的后果PowerBuilder必勾沒有 IDEODBC 接口必勾連庫報 DBMS 不支持Native 數(shù)據(jù)庫接口按生產(chǎn)庫類型勾只能走 ODBC性能差一截ASA / 示例庫建議勾缺一個可離線驗證的庫InfoMaker看項目報表 .pbl 打不開Web 部署組件一般不勾無影響只占空間有個細(xì)節(jié)容易被忽略安裝程序會問是否安裝「共享組件」到公共目錄這一步選是。PB9 的 OCX 控件和 ODBC 驅(qū)動會注冊到系統(tǒng)級選否的話同一臺機(jī)器上其他賬戶登錄后可能找不到驅(qū)動。3.3 高分屏下的界面與 DPI 設(shè)置Win10 之后默認(rèn)縮放經(jīng)常是 125% 或 150%PB9 的畫筆界面是按 96 DPI 畫的縮放后按鈕被裁、DataWindow 設(shè)計區(qū)尺寸失真。處理方式是給主程序單獨關(guān)掉 DPI 縮放# 關(guān)閉 pb90.exe 的高 DPI 縮放避免畫筆界面錯位 $exe C:\PB9\pb90.exe $key HKCU:\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers New-ItemProperty -Path $key -Name $exe -Value ~ HIGHDPIAWARE -PropertyType String -ForceHIGHDPIAWARE告訴系統(tǒng)這個進(jìn)程自己處理縮放實際效果是把界面按 100% 渲染字體略小但布局不再錯亂。代價是在 4K 屏上字會比較小通常配合把顯示器縮放臨時調(diào)到 100% 使用。3.4 注冊表與配置文件的實際位置裝完之后配置并不只存在一個地方。IDE 的界面布局、最近打開的工程記在用戶目錄的 ini 里數(shù)據(jù)庫接口的參數(shù)在安裝目錄的 pbodb90.ini而安裝信息、組件注冊在注冊表。三處不一致時就會出現(xiàn)「設(shè)置明明改了卻不生效」的玄學(xué)現(xiàn)象。排查順序我固定為先看安裝目錄 pb.ini 的[Database]段再看用戶目錄是否有同名文件覆蓋最后查注冊表分支。用戶目錄的 ini 優(yōu)先級高于安裝目錄這一點在多人共用一臺機(jī)器時特別容易出問題——A 改了連接參數(shù)B 登錄后用的還是自己的那份。注意不要把安裝目錄做成網(wǎng)絡(luò)共享給多人同時開發(fā)pb.ini 會被并發(fā)寫壞PBL 庫文件也可能因為文件鎖出現(xiàn)只讀。要么每人本地一份要么走源碼管理導(dǎo)出。4. 連庫與第一個 DataWindow事務(wù)對象、驅(qū)動和 PB.INI 的配合環(huán)境裝完只是把工具擺上桌真正驗證這套環(huán)境可用是讓 IDE 連上數(shù)據(jù)庫、拖出一個 DataWindow 并成功檢索出數(shù)據(jù)。這一步過了后面讀代碼、改邏輯、編譯發(fā)布才有意義。PB 的數(shù)據(jù)庫訪問模型和現(xiàn)在的 ORM 完全不同它圍繞一個叫事務(wù)對象Transaction Object的全局變量轉(zhuǎn)全局默認(rèn)的那個叫 SQLCA。4.1 三種連接方式怎么選方式DBParm 里的 DBMS 寫法適用場景主要代價ODBCODBC快速驗證、冷門數(shù)據(jù)庫多一層驅(qū)動性能略低Native 接口按庫類型如MSS Microsoft SQL Server生產(chǎn)環(huán)境常規(guī)選擇需要對應(yīng) DLL 已安裝直連 ASASYC Sybase Adaptive Server Anywhere本地示例庫驗證僅限 ASA維護(hù)老系統(tǒng)時我建議先用 ODBC 打通確認(rèn)賬號、網(wǎng)絡(luò)、庫名都沒問題再切到 native 接口調(diào)優(yōu)。反過來的順序會讓你在驅(qū)動層和網(wǎng)絡(luò)層之間反復(fù)懷疑浪費大量時間。4.2 用腳本設(shè)置 SQLCA 并連接在應(yīng)用對象的 Open 事件里寫連接邏輯是最常見的落地位置。下面這段可以直接抄改// 應(yīng)用 open 事件配置事務(wù)對象并連接數(shù)據(jù)庫 SQLCA.DBMS ODBC SQLCA.AutoCommit False SQLCA.DBParm ConnectStringDSNeasdemo9;UIDdba;PWDsql CONNECT USING SQLCA; IF SQLCA.SQLCode 0 THEN // SQLCode: 0 成功, 100 未找到, -1 出錯 MessageBox(數(shù)據(jù)庫連接失敗, SQLCA.SQLErrText) HALT CLOSE END IFDBMS決定走哪個接口寫錯會直接報「DBMS xxx is not supported in your current installation」這基本等價于「安裝時沒勾對應(yīng)驅(qū)動」。AutoCommit False是老項目里更安全的默認(rèn)值意味著更新后必須顯式COMMIT好處是出錯能回滾壞處是忘了提交會鎖表。DBParm里的ConnectString是 ODBC 專用寫法換成 native 接口時要改成Database、ServerName、LogId、LogPass這些分散屬性。SQLCode的三種取值要記牢0 是成功100 是沒查到記錄不是錯誤-1 才是真出錯。很多老代碼把 100 當(dāng)失敗處理導(dǎo)致空表場景下一進(jìn)界面就彈錯誤框。4.3 SetTrans 與 SetTransObject 的區(qū)別新手最常踩的一個坑是分不清SetTrans和SetTransObject。前者讓 DataWindow 自己用內(nèi)部事務(wù)連接數(shù)據(jù)庫用完即斷后者共享外部傳入的事務(wù)對象連接復(fù)用。// 推薦共享應(yīng)用級事務(wù)性能好、可統(tǒng)一提交 dw_1.SetTransObject(SQLCA) dw_1.Retrieve() // 不推薦在循環(huán)里用每次 Retrieve 都可能新建連接 // dw_1.SetTrans(SQLCA)SetTrans不是不能用它在單次查詢、不需要事務(wù)控制的場景下反而簡單。但只要涉及多條 DataWindow 聯(lián)動更新就必須用SetTransObject否則每條 DataWindow 各自提交一條失敗一條成功數(shù)據(jù)就臟了。4.4 更新、提交與回滾的標(biāo)準(zhǔn)寫法檢索出來只是第一步能不能正確寫回才是關(guān)鍵。DataWindow 的 Update 返回值約定是1 表示成功0 表示沒有行需要更新-1 表示失敗。// 保存按鈕更新并顯式提交 Long ll_rc ll_rc dw_1.Update() IF ll_rc 1 THEN COMMIT USING SQLCA; IF SQLCA.SQLCode 0 THEN ROLLBACK USING SQLCA; MessageBox(提交失敗, SQLCA.SQLErrText) END IF ELSEIF ll_rc -1 THEN ROLLBACK USING SQLCA; MessageBox(更新失敗, SQLCA.SQLErrText) END IF這段代碼的價值在于它覆蓋了Update成功但COMMIT失敗的情況——數(shù)據(jù)庫連接中斷、死鎖、約束沖突都可能發(fā)生在提交階段此時必須回滾否則會留下懸掛事務(wù)把表鎖住。老項目里經(jīng)常見到只判斷Update返回值、不判斷COMMIT結(jié)果的寫法線上偶發(fā)的「表被鎖住」大多來自這里。要讓 Update 正確生成 SQLDataWindow 還得配好三件事更新屬性里選擇目標(biāo)表、指定主鍵列、勾選可更新列。主鍵選錯會導(dǎo)致更新影響 0 行卻返回成功這是最隱蔽的一類問題。5. 五類現(xiàn)場排查裝不上、打不開、連不通、亂碼、打印崩這些問題我在不同機(jī)器上反復(fù)遇到過下面按「現(xiàn)象 → 原因 → 解決」寫方便對照排查。5.1 安裝程序卡在進(jìn)度條不動現(xiàn)象setup.exe 跑到一半停住進(jìn)度條長期不動CPU 占用接近零。原因老版 InstallShield 在處理系統(tǒng)配置回調(diào)時會等待一個 16 位兼容子進(jìn)程現(xiàn)代系統(tǒng)上該進(jìn)程無法正常創(chuàng)建也可能殘留了上一次中斷安裝的臨時文件。解決先清理%TEMP%下以_is或{開頭的殘留目錄再確認(rèn) setup.exe 已加 XP SP3 兼容標(biāo)記和管理員權(quán)限然后重啟機(jī)器重新安裝。仍然卡住的話改用解壓工具把安裝介質(zhì)里的 DISK1 內(nèi)容攤平到本地目錄從里面的 data 目錄直接手工拷貝文件再補跑共享組件的注冊腳本。5.2 裝完雙擊圖標(biāo)沒反應(yīng)現(xiàn)象pb90.exe 雙擊后進(jìn)程一閃而過沒有任何窗口和報錯。原因主程序缺少兼容性設(shè)置或者安裝時依賴的 VC 運行庫、MSXML 組件沒注冊成功。解決給 pb90.exe 加 XP SP3 兼容標(biāo)記并以管理員身份運行一次確認(rèn)安裝目錄下 pbvm90.dll、pbshr90.dll 等運行時文件都在用依賴查看工具看 pb90.exe 是否缺少某個系統(tǒng) DLL缺什么補什么。5.3 連庫報 DBMS 不支持現(xiàn)象腳本里寫SQLCA.DBMS ODBC運行時提示該 DBMS 在當(dāng)前安裝中不受支持。原因安裝時 ODBC 接口組件被取消勾選或者 pbodb90.dll 沒有注冊到系統(tǒng)。解決重跑安裝程序只勾選數(shù)據(jù)庫接口組件做補裝補裝后確認(rèn)安裝目錄下存在 pbodb90.dll并在 ODBC 數(shù)據(jù)源管理器里能看到對應(yīng) DSN。DSN 是 32 位的64 位系統(tǒng)默認(rèn)打開的是 64 位數(shù)據(jù)源管理器要專門找 32 位那個版本。5.4 中文數(shù)據(jù)檢索出來是亂碼或問號現(xiàn)象庫里存的中文DataWindow 檢索出來顯示成方框、問號或亂碼。原因數(shù)據(jù)庫字符集和 PB 連接的 NLS 設(shè)置不一致或者客戶端字體缺失。解決先確認(rèn)數(shù)據(jù)庫端的字符集再在 pbodb90.ini 里調(diào)整對應(yīng)的 NLS 配置項ODBC 連接串里也可以顯式帶上字符集參數(shù)。改完必須完全退出 IDE 再重進(jìn)ini 只在啟動時讀取一次。字體問題則是另一回事DataWindow 里指定了系統(tǒng)不存在的字體時會退化成符號字體換成通用中文字體即可。5.5 打印預(yù)覽空白或打印時報錯現(xiàn)象DataWindow 打印預(yù)覽一片白或者點打印直接拋異常。原因系統(tǒng)默認(rèn)打印機(jī)是虛擬打印機(jī)PDF 打印機(jī)、OneNote 之類老版打印邏輯無法正確獲取設(shè)備上下文。解決把一臺真實物理打印機(jī)設(shè)為默認(rèn)或者裝一個穩(wěn)定的 PDF 打印機(jī)驅(qū)動并確保它能正常打印測試頁再檢查 DataWindow 的打印規(guī)格里紙張尺寸是否與驅(qū)動支持的尺寸匹配自定義紙張在老驅(qū)動上經(jīng)常不被識別。6. 運行時打包與版本共存怎么確認(rèn)這次裝的是真能用IDE 能開、能連庫不等于交付的 exe 在客戶機(jī)上能跑。PB9 的運行時是一組 DLL缺一個就是啟動即報錯而且報錯信息往往只有一句模糊的「找不到組件」。所以裝完環(huán)境之后我還會再走一遍運行時驗證確認(rèn)這套安裝是完整的。6.1 最小運行時清單文件作用是否必須pbvm90.dllPowerBuilder 虛擬機(jī)解釋執(zhí)行 pbd必須pbshr90.dll公共函數(shù)庫必須pbdwe90.dllDataWindow 引擎有 DataWindow 就必須pbtrs90.dll事務(wù)與數(shù)據(jù)庫接口管理連庫就必須pbodb90.dllODBC 接口實現(xiàn)走 ODBC 就必須libjcc.dllJava 支持底層庫部分版本啟動即依賴清單的用法很簡單把編譯出來的 exe、pbd 和上表文件放進(jìn)同一個目錄在一臺沒裝過 PB 的干凈機(jī)器上雙擊。能起來、能連庫、能出數(shù)據(jù)才算交付成立。用注冊表或 PATH 去找 DLL 的做法不要用在交付機(jī)上路徑污染導(dǎo)致的版本錯亂極難排查。6.2 多版本共存時的順序問題機(jī)器上同時裝 9.0 和更高版本時沖突主要發(fā)生在兩處一是 OCX 控件的 CLSID 注冊后裝的高版本會覆蓋低版本注冊項導(dǎo)致老工程打開時控件加載失敗二是 PATH 里運行時 DLL 的搜索順序exe 優(yōu)先加載同目錄其次才是 PATH所以同目錄自查最可靠。真要共存我給每個版本單獨裝目錄、單獨配快捷方式PATH 里一個都不加靠 exe 同目錄的 DLL 決定實際版本。6.3 四步驗收法新建一個空 Application拖一個窗口寫上面那段連接腳本連上庫后建一個 DataWindow 檢索十行數(shù)據(jù)最后編譯成 exe 拷到干凈機(jī)器跑一遍。四步全過說明這次安裝包下載到的介質(zhì)是完整的、組件是全的、運行時是配套的。從那以后我每次裝完 PB9都會強(qiáng)制走一遍這四步哪怕當(dāng)時只是要打開一個老 PBL 看一眼代碼?;ㄊ昼姄Q來的是不用在客戶現(xiàn)場對著「找不到 xxx.dll」發(fā)呆。希望幫到你。本文還有配套的精品資源點擊獲取