简介:这是一款免安装的PowerBuilder 9.0便携版,面向需要快速启用PB开发环境的IT人员、数据库应用开发者及远程协助场景,用户无需执行完整安装流程,解压即可使用,避免了系统冲突与繁琐配置,可显著提升临时环境下的工作效率。压缩包共677个文件,约53.48MB,以头文件(h)、库文件(lib)、动态链接库(dll)为主,同时包含可执行文件、jar包、配置文件及少量文档,各类型文件协同提供完整的PB9运行环境,目前已有1465人学习下载。该版本完整保留了PowerBuilder 9.0的众多核心能力,如数据窗口、PowerScript语言、事件驱动编程、EAServer集成及Web服务支持,并兼容.NET环境,同时集成版本控制与调试工具,便于团队协作和问题排查,对于需要远程为客户提供技术支持或临时搭建开发环境的用户,这是一套轻量高效的解决方案。
1. 明知它老,为什么还要做一份免安装的PB 9.0
零几年上线的ERP、MES、证券清算系统,很多底层都是用PowerBuilder 9.0写的。这类系统通常不再有研发投入,但业务一天不敢停。我今年接的维护项目就是这样:生产库在跑,前端是PB编译出来的exe加PBD动态库,开发机是一台Windows 7的老机器。现在要在新配的虚拟桌面里做联调,虚拟桌面只有普通域用户权限,软件中心里根本找不到Sybase PowerBuilder,也没有管理员权限去跑安装包。
于是我把一台健康开发机上完整安装的PB 9.0整个目录复制出来,手工补环境配置,做成了免安装PowerBuilder9.0。这个方案解决的不只是“没权限”一个问题,它还能快速交付给外包同事、在多个隔离网段里维护同一个工具、避免安装包对系统产生杂七杂八的改动。这篇文章就是把我整个制作和排障过程复盘一遍,给正在维护PB 9.0遗留系统的开发、运维、IT负责人一个可以直接抄作业的参考。
1.1 PB 9.0在今天的位置:不多余,但是脆弱
PB 9.0和现在主流的.NET/Java体系差异很大。它自带的DataWindow是一套完整的数据展示与更新机制,很多银行、制造、物流的核心流程仍然依赖它。改造成新前端架构的成本太高,所以这些老系统只能继续用老工具维护。
但新电脑、新系统越来越多,PB 9.0在Windows 10/11上经常表现出各种水土不服,比如高DPI显示错乱、旧运行库缺失、数据库驱动不兼容。这种脆弱性恰恰是免安装方案的价值所在:把环境固定成一个目录,至少能保证用户拿到的工具集合是确定的,不再受单台机器差异影响。配合兼容模式运行,一套打包好的环境往往比“现场安装”更可控。
1.2 免安装版比安装版好在哪
免安装不等于乱拷文件,实际是把安装包做的事手工拆开,只保留运行和开发所需部分。我理解的免安装有几个核心优势:
- 无需管理员权限,适用于虚拟桌面和权限受限环境;
- 交付以目录为单位,备份、迁移、传给同事都很方便;
- 不污染系统注册表,不影响其他软件;
- 可以并放多个PB版本,比如9.0和12.5同时存在。
当然代价是数据库连接要自己维护,数据库驱动需要一并分发。这本质上更接近“自带运行时”的思路,而不是依赖系统里现成的环境。
2. 制作免安装版的第一步:从安装目录里提取最小可用集
2.1 用一台“健康”的开发机作为母本
制作免安装版的第一步,不是去网上下一个来路不明的绿色版,而是找一台业务正常的PB 9.0开发机。我用的母本是一台Windows 7 32位机器,上面已经装好PB 9.0、SQL Server客户端、各种ODBC驱动,而且实际跑过业务。这台母本越干净越好,别装一堆乱七八糟的PB插件,否则免安装包里也会带上。
拿到母本后,先确认pb90.exe没有在运行。如果有编译服务在后台,最好把进程都结束。然后把整个PowerBuilder 9.0目录复制出来,我建议放到C:\PB90Portable这类纯英文、无空格的路径下。PB 9.0是老软件,对中文路径和带空格路径虽然多数时候能用,但一旦涉及ODBC配置、编译临时文件路径时很容易抽风,没必要给自己埋雷。
2.2 核心文件与可以精简的目录
完整安装后,安装目录里有开发IDE、示例代码、在线帮助文档等。免安装时建议保留下列核心内容:
| 文件/目录 | 含义 | 是否可精简 |
|---|---|---|
| pb90.exe | IDE主程序 | 不可精简 |
| PBVM90.dll | PowerBuilder虚拟机 | 不可精简 |
| PBDWE90.dll | DataWindow引擎 | 不可精简 |
| PBODBC90.dll | ODBC数据库接口 | 需要ODBC时保留 |
| PB.INI | 全局初始化与数据库配置 | 不可精简 |
| DataWindow等子目录 | 控件资源和系统库 | 保留 |
| Code Examples、Tutorial、HTML Help | 示例与帮助 | 可删 |
精简时不要只删文件,还要检查目录里有没有快捷方式或配置文件引用了被删的内容。我实际踩过一次,把Tutorial目录删了,IDE启动时有一个菜单项一直报路径错误,虽然不影响编译,但每次点开都很烦。
2.3 手工补注册表项
PB 9.0启动时会读取注册表中的安装路径信息,缺少了虽然不一定立刻崩,但会导致某些资源找不到。我通常在目标机器上通过reg命令写入安装路径,注意32位程序在64位系统上注册表会被重定向到WOW6432Node,干脆两边都写:
reg add "HKLM\SOFTWARE\Sybase\PowerBuilder\9.0" /v InstallPath /t REG_SZ /d "C:\PB90Portable" /f reg add "HKLM\SOFTWARE\WOW6432Node\Sybase\PowerBuilder\9.0" /v InstallPath /t REG_SZ /d "C:\PB90Portable" /f如果当前账号没有HKLM的写权限,可以写到HKCU下:HKCU\SOFTWARE\Sybase\PowerBuilder\9.0,对当前登录用户同样生效。这里要注意,不同机器的权限策略不一样,实在写不了注册表强行跑,一般也能把IDE拉起来,但建议还是把这个步骤放进交付脚本里,减少变量。
3. 环境配置绕不开的两座山:ODBC和数据库客户端
3.1 32位ODBC数据源
PB 9.0是32位程序。在64位Windows上,开始菜单里的“ODBC数据源”默认是64位版本,用它建的DSN,PB根本看不到。必须打开SysWOW64目录下的32位ODBC管理器:
%windir%\SysWOW64\odbcad32.exe这个坑非常多,我第一次交付时就是在这里翻车的。当时在目标机器上明明用系统ODBC管理器建好了DSN,测试连接也通过,PB里却始终看不到。后来才意识到,PB这类32位程序只能加载32位驱动。
配置时我建议优先建“系统DSN”,原因是系统DSN以注册表配置写入,对当前机器上所有账号可见,后续多个人共用免安装包时行为一致。项目里的数据库连接串如果是写死在代码里的,最好把DSN名字保持和母本完全一致,否则就要改代码里的连接配置,工作量会大很多。
3.2 数据库客户端运行时
PB驱动只是壳,真正连上数据库还要依赖数据库客户端。比如用MSS接口连SQL Server的时候,PB 9.0底层调用的是DB-Library,运行机器上必须有ntwdblib.dll;用ODBC连MySQL,必须装对应的MySQL ODBC驱动;连Oracle则依赖Oracle客户端。免安装包不能只带PB,还要把对应的数据库客户端运行时一起分发。
最省心的做法是把这些DLL放到PB安装目录下,让PB优先在目录内加载。实测下来,ntwdblib.dll直接放免安装目录是最有效的,版本尽量和母本一致,避免SQL Server服务端版本跨度太大导致TDS协议不兼容。如果你有自己的稳定环境,可以按实际客户端版本来调整,核心原则就是“不让PB去系统目录里碰运气”。
3.3 pb.ini与系统环境变量
PB.INI记录数据库Profile、窗口库、编辑器设置等。把母本里的PB.INI复制过来时,要检查里面有没有写死的绝对路径。如果有,直接改成新目录路径。免安装目录里的PB.INI最好设置为可写,否则每次修改连接或导出库时它写不进去,配置会静默丢失。
我一般还会把免安装目录加入PATH环境变量:
setx PATH "%PATH%;C:\PB90Portable"这主要是为了方便命令行调用pb90.exe,也方便后续交付时写批处理脚本。团队其他人拿到包后不需要一个个手动配置系统路径。不过setx会把原有的PATH读出来再拼接,如果原PATH太长会有截断风险,执行前先备份一下系统PATH值。
4. 验证之路:从IDE启动到DataWindow取数
4.1 先让IDE活过来
拿到免安装版后,不要急着打开业务代码。先双击pb90.exe,如果启动正常,说明核心运行时和注册表基本没问题。然后打开一个测试用的.pbl,新建一个Window,拖一个DataWindow控件,看资源面板是否正常。
此刻最容易出现的现象是,程序能起来,但打开窗口编辑器时直接卡死或报错。绝大多数情况是目录有只读属性,或者权限不够。检查一下免安装目录是否允许当前用户读写,另外右键pb90.exe,选择“以兼容模式运行”运行,首选Windows XP Service Pack 3。这一步能解决大部分老IDE在新系统上的启动异常。
4.2 连数据库,验证DSN和接口
数据库连接是免安装能不能用的关键。我习惯按下面的顺序验证:
- 在32位ODBC管理器里建同名的DSN,点击“测试连接”;
- 打开PB,新建一个Database Profile,选择ODBC,指向该DSN;
- 点击Connect,能连上后右键DataWindow,执行Retrieve;
- 如果失败,把报错截图,按下一节的排查链路定位。
这套验证路径覆盖了从“IDE可用”到“业务可用”的关键环节。如果只是打开IDE成功但数据库连不上,这个免安装包依然不合格,因为PB 9.0在遗留系统里的核心职责就是连库取数。
4.3 编译与运行
IDE验证完,还要验证应用能不能编译。PB 9.0工程一般会把代码编译成exe加PBD动态库,免安装版另一项重要作用就是能在新机器上重新编译、重新生成PBD。我会新建一个最简单的应用,写一个按钮弹消息框,编译成exe,放到另一台没有PB的机器上运行。如果在有runtime DLL的情况下能跑通,说明免安装开发环境的完整性已经达标。
到这一步基本可以确认免安装版已可用于日常开发和问题排查。但实战中,绝大多数关于免安装的疑问是“为什么我拷过去双击没反应”“为什么连不上库”。下面的排查链路,是踩坑最密集的三个方向。
5. 排错链路:三个最典型的故障和完整定位过程
5.1 双击pb90.exe无反应,任务管理器闪退
有一次交付给外包同事,他双击后等了几秒,什么都没发生。我先让他打开任务管理器观察,进程出现一秒就消失了,这是典型的DLL加载失败。
排查链路:
- 打开事件查看器,Windows日志 -> 应用程序,找到错误事件,里面会写明是哪个模块出错;
- 这次事件信息指向
msvcr71.dll缺失。Windows 10/11不会预装这个VC7运行时; - 从母本的SysWOW64目录里把
msvcr71.dll、msvcp71.dll复制到免安装目录; - 再不行就用ProcessMonitor(Sysinternals工具)监控pb90.exe启动时的文件操作,看哪个路径加载失败。
这个问题后来被我总结成一条经验:每份免安装包都内置必要的VC运行库文件。分发第三方DLL时要遵守对应组件许可,实际建议从微软可再发行包或本机合理来源获取,不要把来源不明的DLL直接塞进生产环境。
5.2 报错“Unable to load database interface”
数据库连接失败有很多种报错,最经典的是“Unable to load database interface”或“Cannot load DLL”。这个报错一出,很多人第一反应是卸载重装,其实不用。
排查链路:
- 看具体DBMS接口名。用ODBC接口时,检查
PBODBC90.dll是否在目录里; - 检查数据库驱动是否安装。比如连接MySQL,如果没有装MySQL ODBC驱动,ODBC管理器里根本建不出对应DSN;
- 检查DSN是不是建在32位管理器里;
- 检查连接串是否写死。
我遇到过一次比较隐蔽的情况:开发机的ODBC驱动版本是5.x,目标机器装的是8.x,DSN名字一样但驱动名变了,导致PB找不到驱动。后来的方案是在免安装包里附带指定版本的ODBC驱动安装程序,或者改用文件DSN,从根本上避免注册表驱动不一致的问题。
5.3 Windows 10/11上显示错乱、工具栏消失
PB 9.0在高分屏上很容易出现字体模糊、窗体控件错位,甚至菜单栏直接消失的情况。这是老程序的经典毛病,解决路径比较固定:
右键pb90.exe -> 属性 -> 兼容性 -> 勾选“以兼容模式运行这个程序” -> 选择Windows XP Service Pack 3,再勾选“替代高DPI缩放行为”,下拉选“系统(增强)”。
如果还出现窗口布局错乱,把系统显示缩放临时调到100%启动一次,多数能恢复。这个时代的工具没有适配高DPI逻辑,界面是按96dpi画的,缩放一旦超过100%,坐标就对不上了。
6. 免安装版不是终点:与PB 12.5迁移的衔接思考
6.1 免安装版解决“现在”,迁移解决“未来”
会搜到PowerBuilder 12.5的人,多半是手上还攥着一套PB 9.0老工程,正在评估是否升级。免安装版和升级并不冲突。实际上,我会把免安装版当成升级前的一个重要辅助工具。
它可以做什么?
- 在无开发权限的新机器上继续维护9.0代码;
- 在升级到PB 12.5之前,用9.0对旧代码做基线备份验证;
- 如果升级后出现问题,随时切回免安装版确认是代码问题还是环境问题。
6.2 从9.0到12.5需要留意的兼容性边界
PB 12.5 classic对PB 9.0的窗口、DataWindow、菜单大部分兼容,打开旧工程基本可以直接编译。但有几类内容需要人工检查:
- Unicode处理:9.0时代很多中文问题依赖系统代码页,12.5默认Unicode,字符串比较和写入数据库的编码方式会有差异;
- 自定义用户对象和第三方OCX:32位OCX在12.5中可能注册麻烦,控件版本也要重新找;
- Web Service、PBNI等接口:基本属于重做范围。
我个人的建议是,不要指望一次全量升级。先拿最边缘、不重要的模块试迁移,跑通后再逐步切换核心流程,整个过程用免安装版做安全垫,随时可以退回老环境对比行为差异。
6.3 把免安装包做成团队的运维标准件
经过几次交付后,我把它沉淀成了团队的标准交付模板:
- 统一目录名
C:\PB90Portable,避免每个人路径不一样导致配置五花八门; - 打包清单里除了PB目录,还包含说明文档、注册表导入脚本、ODBC驱动安装包、数据库客户端DLL;
- 提供两个批处理:一键导入注册表、一键创建DSN;
- 版本号写在包外层的txt文档里,避免后续交接时不知道包里装了什么驱动。
这套做法本质上是把“免安装”从临时办法升级成了可复制的运维资产。以后每次接到同类老系统维护需求,我只需要把标准包拷过去,按说明执行两步脚本,十分钟内就能拉起一套能连数据库、能编译PBD的PB 9.0环境。对于在存量系统里挣扎的团队来说,这件事值得做一次。
本文还有配套的精品资源,点击获取