PowerBuilder 8.0安装配置与64位兼容排错实战
简介PowerBuilder 8.0 是面向企业级数据库应用开发的经典工具借助 DataWindow 控件、PowerScript 脚本语言与面向对象模型可较快构建桌面端和 Web 端的数据驱动系统常用于旧系统维护、业务表单开发和数据查询界面搭建。该压缩包面向需要获取这一版本开发环境、复现经典 PB 项目或研究其技术体系的人员共收录 5321 个文件包含 gif、htm 等界面与帮助素材dll、exe、cab 等运行和安装组件以及 dat、tdr 等数据与模板文件整体约 714.2MB目录结构较完整。包内还附带 8.02 升级包可弥补原版 8.0 的部分瑕疵并改善稳定性便于搭建较完整的开发与测试环境也可用于教学演示与历史版本对照。已有 1991 人学习下载适合用于旧系统维护、经典项目复现、DataWindow 技术研究及 .NET 集成能力验证并了解早期 Web 窗口与数据库连接方案。1. PowerBuilder 8.0 装前先认清64 位系统上的翻车点把 PowerBuilder 8.0 开发工具下载下来解压双击 setup.exe进度条走到一半多突然回滚事件查看器里只留一个 1603——这是我在 64 位机器上复现次数最多的一幕。PB 8.0 是 32 位时代的产物安装器、DLL 注册、ODBC 驱动、帮助文件全按 32 位路径写死系统一旦是纯 64 位环境它不是装不上而是装上了也跑不干净IDE 能打开DataWindow 画不出来库能连上取回来的中文全是方块。这套环境在维护老系统的团队里出现频率极高多数人不是不会点下一步而是不知道哪一步该退回到 32 位环境里做。下面按我实际装过的顺序把系统选择、组件取舍、环境变量和排错一条条摆出来。2. 环境清单PB 8.0 到底该装在什么系统上装老 IDE 最忌讳的一件事是拿到安装包先双击装失败了再回头找原因。PB 8.0 的安装器对宿主环境相当挑先把系统和依赖定死后面九成的怪问题根本不会出现。这一章不急着讲怎么点下一步先把「装在哪、装之前要准备什么、装坏了怎么退」三件事定下来。2.1 宿主系统与硬件一张能直接对照的表PB 8.0 发布于 32 位 Windows 的黄金期它的安装器是 16 位引导加 32 位主体DLL 注册依赖HKLM\SOFTWARE的 32 位视图。放到 64 位系统上注册表会被重定向到WOW6432Node部分 OCX 注册会静默失败所以我的原则很简单能用 32 位就用 32 位必须用 64 位就上虚拟机。宿主系统位数可行度实际表现Windows 2000 Professional SP432 位最稳官方时代的原生环境组件全绿Windows XP SP332 位稳我用得最多的一档兼容性问题极少Windows Server 200332 位稳适合装在测试服务器上跑批处理Windows 7 32 位32 位可用需要兼容模式ODBC 要用 32 位管理器Windows 7 / 10 / 11 64 位64 位痛苦建议整套丢进虚拟机别在物理机上硬刚硬件门槛写得低实际体感差很多。安装程序标称 128MB 内存能跑但 PB 8 的 IDE 一开对象画板、再挂个 DataWindow 预览256MB 就开始频繁换页。我一般给虚拟机配 2 核、2GB 内存、40GB 磁盘装完系统加 IDE 和本地库占用 1.21.6GB剩下的留给数据库文件和编译产物。分辨率别低于 1024×768PB 8 的工具栏是固定像素布局800×600 下画板会互相遮挡改起来很别扭。系统语言这块有个容易忽略的点中文版 Windows 上装英文版 PB 8界面是英文但控件字体默认走 System中文会显示成方块反过来英文系统装中文版帮助文件又可能打不开。我的建议是宿主系统和 IDE 语言版本保持一致省掉后面调字体的麻烦。2.2 依赖组件与安装介质自检PB 8 的安装器会检查几个前置组件缺了不报错直接跳过对应功能等你用的时候才发现某个功能是灰的。装之前花五分钟确认下面这几项Internet Explorer 5.5 及以上。PB 8 的 Web DataWindow 和部分 HTML 帮助依赖它IE 版本太低时帮助文档会打不开但不影响 IDE 主体。MDAC 2.6 及以上Windows XP SP3 以上系统自带。ODBC 驱动管理和数据源配置全靠它。Windows Installer 2.0。PB 8 用的是 InstallShield 打包个别组件走 MSI版本太低会卡在「正在准备安装」。本地管理员权限。安装过程要写HKLM和%ProgramFiles%非管理员账号装到一半必然 1603。安装期间临时关闭杀毒软件的实时防护。不是为了别的是 OCX 和 DLL 注册那几十秒最容易被拦下来拦完不提示装完就是一堆「类未注册」。介质完整性我习惯先过一遍再动手。PB 8 的完整安装源通常是一个 setup.exe 加若干 cab/msi总大小在几百 MB 量级。把安装源拷到本地磁盘再校验比直接在虚拟光驱里跑稳# 统计安装源的文件数与总体积和介质说明对一下缺文件在这里就能发现 $src D:\PB80 $files Get-ChildItem -Path $src -Recurse -File [PSCustomObject]{ FileCount $files.Count TotalMB [math]::Round(($files | Measure-Object Length -Sum).Sum / 1MB, 1) HasSetup Test-Path (Join-Path $src setup.exe) }这段输出里TotalMB明显偏小基本就是拷贝中断或者只解压了第一张盘HasSetup为 False 说明解压层级多套了一层目录进错了文件夹。这两个问题在实际操作里出现的概率比想象中高尤其是从压缩包直接双击打开、边解压边安装的时候。提示安装源路径不要带中文和空格。PB 8 的安装器处理含空格路径时偶尔会把引号吃掉导致它去找C:\Program这种不存在的目录。2.3 装前快照我每次都先做的三件事老工具装坏了很难修卸载程序经常留下半截注册表和一堆共享 DLL重装也覆盖不干净。所以在按下 setup.exe 之前我会做三件几乎零成本的事。第一件是给虚拟机打快照或者至少把系统盘的还原点建好。PB 8 的安装过程会往共享目录写 DLL多版本共存时这些 DLL 是公用的装坏了可能连带影响机器上已有的其他 PB 版本。第二件是导出相关注册表分支留一份后悔药:: 安装前备份 PB 与共享组件相关的注册表分支出问题可直接对比或回滚 reg export HKLM\SOFTWARE\Sybase %USERPROFILE%\Desktop\sybase_before.reg /y reg export HKLM\SOFTWARE\WOW6432Node\Sybase %USERPROFILE%\Desktop\sybase_wow_before.reg /y第一条针对 32 位系统第二条针对 64 位系统的重定向视图。两条都执行报「找不到指定的注册表项」不要紧说明这台机器上还没装过任何同系列组件正是干净状态。第三件是确认机器上没有其他版本在跑。开任务管理器看一眼有没有pb90.exe、pb115.exe这类进程有就先关掉。多版本共存的机器上装新版本安装器有时会复用已存在的共享目录把新旧 DLL 混在一起后面启动报的错会非常玄学。3. 安装 PowerBuilder 8.0从挂载镜像到组件勾选环境确认完进入真正的安装环节。这一章的重点不是「一直点下一步」而是三个决策点安装源怎么放、组件怎么勾、路径怎么填。这三处选错后面配置阶段要多花几倍时间补。3.1 解包与 Setup.exe 的正确启动方式拿到的是 ISO 就挂载是压缩包就解压到本地磁盘别在压缩软件里直接双击 setup.exe。我见过不少失败案例根源就是安装器运行在临时解压目录中途清理临时文件时把正在读的 cab 删了。安装源统一放到D:\PB80纯英文、无空格、层级浅。然后给 setup.exe 打兼容标记。这一步在 Windows 7 及以上系统上是必须的用命令行写比手动点属性面板快得多:: 为 PB 8.0 安装程序写入兼容性标记Windows XP SP3 模式 以管理员身份运行 reg add HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers ^ /v D:\PB80\setup.exe /t REG_SZ /d ~ WINXPSP3 RUNASADMIN /fAppCompatFlags\Layers是系统存放兼容性设置的位置键名就是程序完整路径键值里的WINXPSP3表示以 Windows XP SP3 兼容层运行RUNASADMIN表示启动时请求提权。这两个标记解决的是两类问题前者让安装器以为自己跑在老系统上绕开版本检测后者保证注册表写入不被 UAC 拦掉。写完之后用资源管理器进目录右键 setup.exe 看属性里的兼容性页签确认两个勾都生效了再双击。安装期间临时断网某些安装器会尝试做在线检查网络不通时会卡住几十秒到几分钟装完再把网络接回来就行。3.2 组件勾选哪些必装哪些装了就后悔PB 8 的自定义安装会列出一长串组件全勾上要多占近一倍空间还会引入一堆用不上的服务。我的取舍是这样的组件建议大致占用说明PowerBuilder 8.0必装主程序IDE 本体没有它什么都干不了Shared PowerBuilder Files必装几十 MB共享 DLL 目录运行时全靠它Adaptive Server Anywhere 8.0建议装一百多 MB本地开发库单机调试最省事Sybase Central 4.0建议装几十 MB图形化管理工具看表结构很方便InfoMaker 8.0可选一百多 MB做报表才需要纯开发可以不装EAServer / Jaguar CTS不装数百 MB应用服务器本地开发完全用不上Online Books可选一百多 MB离线文档查函数语法有用Web 相关组件不装—老浏览器的技术栈现在没法用共享组件那一项不要取消。PB 8 的 IDE、编译器和运行时是分开的取消共享组件后 IDE 能启动但一编译就报找不到pbdwe80.dll而且这个目录是多个版本共用的后面补装很麻烦。ASA 8.0 我建议勾上因为它是整套环境里最省事的验证手段装完就能本地起一个数据库不用去连外部库第一次跑通全流程全靠它。如果你所在的环境统一用外部的数据库服务这一项也可以去掉但后面的验证步骤就要改成连已有的库。3.3 序列号、安装路径与安装过程中的几个选项安装向导走到序列号那一步填介质里附带的那组。这里不做展开只提醒两点一是序列号区分大小写的情况确实存在复制粘贴比手敲稳二是如果填完提示无效先检查输入法是不是全角状态这个坑我踩过浪费了半小时。安装路径我一般填D:\Sybase而不是默认的C:\Program Files\Sybase。原因有三个一是带空格的路径在 PB 8 的部分命令行工具里要额外加引号脚本写起来容易出错二是共享目录会被写进环境变量路径越短越安全三是装在非系统盘做快照和回滚时影响面更小。安装过程中会出现「是否安装示例数据库」「是否创建开始菜单项」这类选项示例数据库建议装体积不大但里面有现成的表结构和数据验证连接时能省掉自己建表的步骤。开始菜单项建上后面启动 IDE 和数据库工具都方便。整个安装过程大约十到二十分钟中间某一段进度条可能长时间不动那是在注册 DLL别急着点取消。装完向导会提示重启我的习惯是先不重启直接进下一步配环境变量配完再统一重启一次省一次开机时间。4. 配置开发环境环境变量、配置文件与 DB Profile装完能双击出图标只能说明程序装上了能不能正常画 DataWindow、能不能连上库全看这一章。PB 8 的配置项不多但每一项都直接影响启动我把它们按「必须先配、可以后配」分成三层。配置顺序乱了会得到一个能启动但什么都干不了的 IDE。4.1 环境变量四个值顺序决定加载哪个 DLLPB 8 启动时要找一堆运行时 DLL找的顺序由 PATH 决定。如果机器上还装过其他版本PATH 里两个共享目录同时存在先出现的那个版本会赢于是出现「明明装的是 8.0启动起来界面却是别的版本的样子」这种怪事。先确认安装器自动写进去的那个变量:: 检查 PB 安装器写入的根目录变量正常应指向安装时选择的路径 echo %SYBASE%输出为空说明安装器没写成功常见于非管理员安装需要手动补。接着往 PATH 里追加三个目录顺序是共享 DLL 目录、数据库客户端目录、管理工具目录# 以「只追加缺失项」的方式改系统 PATH避免重复项和长度截断 $add ( D:\Sybase\Shared\PowerBuilder, D:\Sybase\SQL Anywhere\Win32, D:\Sybase\Shared\Sybase Central 4.0\Program Files ) $cur [Environment]::GetEnvironmentVariable(Path, Machine) $parts $cur -split ; | Where-Object { $_ -ne } foreach ($p in $add) { if ($parts -notcontains $p) { $parts $p } } [Environment]::SetEnvironmentVariable(Path, ($parts -join ;), Machine)这段逻辑的关键在-notcontains判断。反复执行不会把同一个路径塞两遍PATH 越滚越长的问题就没了。用 PowerShell 而不是setx的原因是setx对超过 1024 字符的值会静默截断机器上装过一堆开发工具的 PATH 很容易超这个长度截断之后前面那些路径全丢表现为一堆本来正常的命令突然找不到。改完 PATH 必须重开命令行窗口才生效已经开着的窗口读的还是旧环境。验证方式很简单:: 新开一个命令行窗口执行能列出文件说明共享目录已经进 PATH where pbvm80.dll dir D:\Sybase\Shared\PowerBuilder\pbvm80.dllwhere能定位到就说明 PATH 生效了。这一步别跳过后面启动报的所有「找不到 XXX.dll」问题八成都是这里没配对。4.2 pb.ini 与注册表改两处就够PB 8 的用户级配置主要落在pb.ini里位置在安装目录下也可能是当前用户目录下的副本具体看安装时的选择。这个文件是纯文本用记事本就能改但改之前先备份一份。[PB] ; 记录最近打开的应用程序与 IDE 的界面偏好 FontName宋体 FontSize9 ; 关闭启动时的欢迎对话框省一次点击 ShowWelcome0 [Database] ; 与 DB Profile 对应记录上一次使用的连接方式 DBMSODBC DBParmConnectStringDSNpb8demo;UIDdba;PWDsql[PB]段里的字体设置解决的是中文显示问题。默认字体在中文系统下经常渲染成方块或者极细的笔画改成宋体 9 号基本能和系统界面统一。这个改动的效果是全局的对象画板、函数面板、数据窗口预览都会跟着变比一个个控件调字体省事。[Database]段记录的是上一次连接的参数第一次装完是空的等你在 IDE 里建好 DB Profile 并成功连接一次它会被自动写进去。注册表要确认的是安装目录记录是否正确尤其是 64 位系统上要检查重定向后的分支:: 分别查看 32 位与 64 位视图下的 PB 注册信息确认安装目录指向实际路径 reg query HKLM\SOFTWARE\Sybase\PowerBuilder\8.0 /v InstallDir reg query HKLM\SOFTWARE\WOW6432Node\Sybase\PowerBuilder\8.0 /v InstallDir如果InstallDir指向的路径和你实际安装的位置不一致比如你装在 D 盘注册表里还是 C 盘的默认值IDE 启动时会去错误的位置找共享文件。改法是直接把键值修正过来不用重装。注意多版本共存时Shared\PowerBuilder目录里可能同时躺着 80、90、115 几个版本的 DLL。文件名带版本号pbvm80.dll、pbvm90.dll不会直接冲突但配置文件里的路径会串。装完新版本后回头检查一下老版本的配置有没有被覆盖。4.3 建 DB Profile用 32 位 ODBC 打通本地库这一步是整套环境能不能跑起来的分水岭。PB 8 通过 ODBC 连数据库而 ODBC 数据源分为 32 位和 64 位两套64 位系统上从控制面板打开的那个 ODBC 管理器默认是 64 位的在里面看不到 ASA 8.0 的驱动会让人误以为驱动没装上。正确的入口是 32 位版本:: 打开 32 位 ODBC 数据源管理器PB 8 只能看到这里建的数据源 C:\Windows\SysWOW64\odbcad32.exe在「系统 DSN」页签里添加驱动选 Adaptive Server Anywhere 8.0数据源名填pb8demo数据库文件指向本地库文件。建好之后先手动测一次连接通了再去 IDE 里配。数据库文件本身要先有。如果安装时勾了示例数据库直接用它没有的话用下面的脚本建一个最小库-- 在数据库管理工具里执行建一张用于验证的最小表 CREATE TABLE t_smoke ( id INTEGER NOT NULL DEFAULT AUTOINCREMENT, name CHAR(20) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ); INSERT INTO t_smoke (name) VALUES (pb8); COMMIT;这张表只有三个字段作用是验证「能建表、能插入、能查询」这条完整链路。AUTOINCREMENT是本地数据库的自增写法换成其他数据库要调整CURRENT_TIMESTAMP作为默认值能顺带验证服务端时间函数是否正常。数据库服务要先起来ODBC 才连得上:: 以个人服务器方式启动本地数据库引擎指定实例名与库文件路径 D:\Sybase\SQL Anywhere\Win32\dbeng8.exe -n pb8demo D:\pbdata\pb8demo.db-n后面是实例名客户端连接时靠它找到进程后面跟着的是库文件的完整路径。这个窗口要一直开着关掉服务就停了。做长期开发环境的话用dbsrv8.exe注册成系统服务更省心开机自启不用每次手动点。最后在 IDE 里建 DB Profile或者直接在代码里写连接串。后者更适合做验证// 事务对象连接本地库连接失败时直接抛出错误信息 SQLCA.DBMS ODBC SQLCA.AutoCommit False SQLCA.DBParm ConnectStringDSNpb8demo;UIDdba;PWDsql CONNECT USING SQLCA; IF SQLCA.SQLCode 0 THEN MessageBox(连接失败, SQLCA.SQLErrText) HALT CLOSE END IFAutoCommit False表示关闭自动提交事务由代码显式控制这符合 PB 应用的常规写法DBParm里是标准的 ODBC 连接串DSN对应刚才建的数据源名。SQLCode返回 0 表示成功非 0 时把SQLErrText弹出来比在日志里翻找快得多。5. 排错PB 8.0 安装与首次启动的四个高频坑前面按流程走下来大部分人能顺利启动。剩下那些卡住的基本都落在下面四种情况里。每条我都按「现象、原因、解决」写照着对号入座就行。5.1 安装进度过半回滚事件查看器留 1603现象安装向导走到「正在注册组件」附近进度条倒退弹出「安装中断」事件查看器里能看到 MSI 返回 1603。原因1603 是个笼统的权限错误PB 8 这个场景下最常见的是三件事叠在一起——安装器没有真正提权、杀毒软件拦下了 OCX 注册、临时目录没有写权限。老安装器不区分这三种情况统统报同一个错误码。解决先确认 setup.exe 的兼容性标记里带了RUNASADMIN属性页里「以管理员身份运行此程序」是勾上的。然后把杀毒软件的实时防护临时关掉把%TEMP%目录清空。如果还是 1603去看安装日志PB 8 的 InstallShield 会把详细日志丢在%TEMP%下一个带日期的 log 文件里搜Return value 3能找到真正失败的那一步通常是某个 DLL 注册失败。5.2 双击图标报「找不到 pbvm80.dll」现象安装完成开始菜单里的图标双击后弹窗提示缺少pbvm80.dll或者进程一闪就退。原因这个 DLL 在共享目录里IDE 启动时靠 PATH 或者注册表里的路径找它。PATH 里没有共享目录、或者注册表里的InstallDir指向了错误位置都会导致找不到。解决先在命令行里跑where pbvm80.dll定位不到就回 4.1 节把共享目录加进 PATH。定位到了还报错说明是注册表路径不对回 4.2 节检查InstallDir。还有一种情况是多版本共存时 PATH 里排在前面的共享目录属于别的版本把 PB 8 的目录挪到最前面即可。5.3 中文显示成方块界面里中英混排现象IDE 能启动但菜单和按钮上的中文全是方块或者问号DataWindow 预览里的数据也是乱码。原因默认字体在中文系统下的字库映射不对另外部分中文数据在 ODBC 层没有走正确的字符集转换。解决先改pb.ini里[PB]段的FontName为宋体、FontSize为 9重启 IDE 看效果这一步能解决界面显示。数据乱码要查 ODBC 连接的字符集参数在连接串里补上编码相关设置或者在数据源配置里把「字符集」显式指定为与数据库一致的值。两边编码一致之后中文才能正常往返。5.4 32 位 ODBC 管理器里看不到 ASA 驱动现象在控制面板的 ODBC 里添加数据源驱动列表里没有 Adaptive Server Anywhere只有 SQL Server 之类的系统自带项。原因打开的是 64 位 ODBC 管理器而 PB 8 和它的驱动都是 32 位的两套数据源互不可见。解决直接运行C:\Windows\SysWOW64\odbcad32.exe。这个路径容易记混——System32目录下放的反而是 64 位版本SysWOW64里才是 32 位版本。建数据源、测连接、排查问题全程都用这个入口。6. 装完怎么验证用一张表跑通建库到取数装完不验证等于没装。PB 8 这种老环境尤其如此表面能启动底层可能缺 DLL、缺驱动、缺注册项要等到真正写代码那天才暴露。我的验证方法很固定建一个最小应用连一次库取一次数把结果打出来。整个过程不超过十分钟但能把九成的配置问题提前挖出来。先起数据库服务用 4.3 节那条命令确认实例名和库文件路径都对。然后开 IDE新建一个 Application放在一个单独的 PBL 里别往现有工程的库里塞。在应用对象的 Open 事件里写下面这段// 最小验证连接 - 建表 - 插入 - 查询 - 输出 - 断开 long ll_id string ls_name SQLCA.DBMS ODBC SQLCA.AutoCommit False SQLCA.DBParm ConnectStringDSNpb8demo;UIDdba;PWDsql CONNECT USING SQLCA; IF SQLCA.SQLCode 0 THEN MessageBox(连接失败, SQLCA.SQLErrText) RETURN END IF // 查询已有数据验证读取链路 SELECT id, name INTO :ll_id, :ls_name FROM t_smoke; IF SQLCA.SQLCode 0 THEN MessageBox(验证通过, 读到记录 id String(ll_id) name ls_name) ELSE MessageBox(查询失败, SQLCA.SQLErrText) END IF DISCONNECT USING SQLCA;这段代码覆盖了验证要看的全部关键点CONNECT说明环境变量、DLL、ODBC 驱动这条链是通的SELECT成功说明数据源配置和字符集没问题MessageBox里中文能正常显示说明字体配置生效DISCONNECT正常返回说明事务对象没有悬空。任何一步失败弹窗里的错误文本都直接指向具体环节比看日志猜快得多。跑通之后再做一份对照检查确认不是碰巧成功检查项通过标准不通过时回看环境变量where pbvm80.dll能定位4.1 节注册表路径InstallDir与实际安装路径一致4.2 节数据源32 位 ODBC 管理器里能看到pb8demo4.3 节、5.4 节数据库服务实例进程在运行端口无冲突4.3 节数据读写建表、插入、查询全成功5.3 节字符集还有个小技巧验证通过之后立刻把当前状态做成快照同时把pb.ini、注册表分支、ODBC 数据源配置一起导出来存到工程目录下。老环境的配置一旦丢了重建的成本远高于备份。我一般会在工程根目录放一个env-backup文件夹里面就三样东西配置文件副本、注册表导出、一张写清楚版本和路径的说明。这套环境我前后装过十几次前面几次几乎每次都栽在「以为装完就完事」上明明能启动写第一行数据库代码就报错回头查半天才发现是 ODBC 开错了版本。从那以后我每次装完 PB 8不管多赶时间都强制把这张表跑一遍跑不通就不往下走。希望帮到你。本文还有配套的精品资源点击获取