请教高手:自动升级的PB程序?

w102272 2000-06-22 05:14:00
我有一个PB+sql server的C/S数据库程序,大约有几十个用户。
由于用户们总在提新的需求,所以我总是在重复:
用户提需求,改进程序, 重新编译, 向每个用户分发
1天 几十分钟 很长时间 用户数*(复制文件时间 + 等他们的时间)
真是不胜其烦!
现在我想在PB应用程序中做一个自动升级的功能,
把更新版本放在服务器的一个共享目录下,
当用户启动PB程序后,这个程序自动检测服务器文件是否更新,
如果更新就提示用户自行从服务器上复制程序来升级,
但是我如何检测服务器上编译后的PB程序是新版本,还是旧版本呢?
PB有没有这样的功能,可以分析执行程序的编译版本号?
或者有什么其他好方法?
...全文
305 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sSam 2000-06-26
  • 打赏
  • 举报
回复
名叫Synchronizer,是PowerBuilder 6.0,6.5带的一个由Sybase开发的ActiveX
c:\program files\sybase\pb6\sync目录下,sync.ocx在\windows\system目录下
到陶清那里去看看http://www.pdriver.com/display.asp?key_id=1326
我有好长时间没有用PB了...
longzu 2000-06-26
  • 打赏
  • 举报
回复
我曾经做过这样的程序,运行的效果是:当用户运行程序我的运用程序时,如果程序有更新,那么就提示用户是否要更新程序,如果用户肯定则自动更新程序到客户端。
我的具体做法是:在客户端放值一个配置文件,该配置文件里记录该客户端上次更新程序的时间。当我更新了程序后,将编译后的*.pbd放到数据库中,再放上程序的更新时间。客户端的程序运行时就将该客户端配置文件上的时间和数据库中的时间比较,如果时间早于数据库记录的时间则提示用户程序已经更新,是否要下载。如果用户回答是则下载数据库中的*.PBD到本地,并覆盖本地的*.pbd及更新本地的配置文件。
另:在数据库中存放PBD文件的字段的数据类型是二进制的,由于这种类型的字段只能存放32K的数据,所以要存成若干行,读取时也要循环读取!
sSam 2000-06-26
  • 打赏
  • 举报
回复
pb自带有一个同步控件,叫SYN...什么的,能解决你的问题。JUST DO IT
w102272 2000-06-26
  • 打赏
  • 举报
回复
to ssam:
在那里?我什么没有找到这个控件?
我只找到这段话:
synchronous request
In a distributed application, a function call made by a client that instructs the server to perform processing immediately. Synchronous requests cause the client to wait until processing is completed.
w102272 2000-06-23
  • 打赏
  • 举报
回复
To haihong:谢谢。能提供给我这个程序吗?
另外,对于你的方法,我想再请教个问题:
把大EXE放在数据库中,数据库系统是否能够承受?
我记得原来在DELPHI这样干过,结果文件不是被截断,就是要花十几分钟来读写
我一直认为目前的数据库系统并没有真正存储M级大文件的能力,
而我的DLL文件已经有8M了!
haihong 2000-06-23
  • 打赏
  • 举报
回复
这个程序我写过的,把exe放在数据库中,带上时间,每次启动的时候比较数据库中的时间和本地文件时间,要是数据库中的时间新的话,把exe下到本地,替换本地的exe,就可以了
不过要先写一个入口程序,否则替换是不成功的。或者放dll到数据库。
wolcy 2000-06-23
  • 打赏
  • 举报
回复
在PB中好象没有取版本号的函数,我认为在系统登录时分发程序比较好,只有EXE文件在此时不分发。
写在数据库的好处是如果服务器为Unix,就不好用网络共享了。
w102272 2000-06-22
  • 打赏
  • 举报
回复
To wolcy:
这样的做法是有问题的,因为在分发程序的时候,PB可能正在调用某个库,这样我的程序
更新动作可能会失败,如果写到一半失败,就可能导致整个PB前端崩溃。
另外,也没有必要一定写到数据库中呀,放在一个网络共享文件夹中就可以了。

其实要比较文件新旧,只比较文件日期比较简单。
但是我记得在VB中似乎可以调用VERSION.DLL来获取DLL的版本号,
不知道PB有没有这样的函数,或者内部调用的API?仅仅靠分析DLL文件就可以?
w102272 2000-06-22
  • 打赏
  • 举报
回复
To wolcy:
wolcy 2000-06-22
  • 打赏
  • 举报
回复
可以把应用程序分成多处PBL,更新的部分只需分发相应的PBD文件,将文件的内容存入数据库中,同时将文件的日期存入,在程序运行时比较本地文件日期是否比数据库中文件日期早,如果数据库中的文件中新版文件,下载更新本地文件。其中用到大文件操作。

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧