toshiba通用模块:编写通用的程序更新模块



目前大多数商业软件Software都提供种“在线升级”功能用户只需上网点几下鼠标即可完成更新升级笔者所在单位拥有个连接了上百台计算机局域网上面运行着套信息管理系统为解决客户端应用更新升级笔者编制了个实现自动更新功能模块该模块能在区别编程语言中实现升级功能具有通用性和灵活性本文介绍该模块(PiUpdate)设计思路和实现思路方法

实现原理
PiUpdate模块基本设计思想是将要更新文件放在文件服务器上工作站上启动时PiUpdate, 对比服务器上文件和本地文件如发现有新文件则更新本地对应文件
首先考虑到通用性要求将该模块设计成个Windows标准动态链接库(DLL)并在DLL中提供个接口供其他由于几乎各种开发工具都支持DLL机制这样就保证了模块通用性
其次为了灵活控制具体更新文件笔者使用了个ini文件来提供相关更新信息ini文件名在主DLL接口时传入
接口定义形式如下:
function ExecuteUpdate(IniFileName:Pchar):eger; stdcall;
如果更新成功则返回0如果出现则返回-1; 当将要更新文件被运行中应用使用时接口会向主返回1 接口形式如下:
Delphi:function ExecuteUpdate(inilename:pchar):eger;stdcall;external ‘PiUpdate.dll’;
PB:function eger ExecuteUpdate(ref name) library“PiUpdate.dll”
考虑到区别编程语言中串存储形式不尽相同参数采用了Windows API标准C语言串形式并且形式也采用Windows标准StdCall形式
配置ini文件形式如下:
[名称]
filename1=\\Server\Share\filename1
filename2=\\Server\Share\filename2

更新思路方法
本文在更新般文件时使用是CopyFile API对于正在使用文件这个思路方法就行不通了开始时笔者查找了Windows API有关资料发现MoveFileEx可以在Windows重新启动时更新指定文件这可以作为种更新正在使用文件思路方法但如果只是更新个小就要用户重新启动有点小题大做味道后来笔者在网上看到HAPPYZSL篇文章发现其中使用窍门技巧十分有效更新过程思路是:如果发现被更新文件正在使用则将源文件复制到本地个临时文件并建立个del.BAT文件结束时运行该BAT文件以完成对这些正在使用文件更新del.BAT文件内容如下:
@echo off
: loop
del destfile
exist destfile goto loop
copy tmpfile destfile
del tmpfile
del .\del.bat
由于del.BAT运行后会直执行直到成功地删除了目标文件为止所以主在检测到接口ExecuteUpdate返回值为1时要立即退出以便del.BAT能顺利地执行下去
实现
实现代码如下:
function ExecuteUpdate(IniFileName: Pchar):eger;
//返回值:0 更新成功;-1 更新出错; 1 要更新文件正在使用需要立即退出
begin
result: =-1 ;
//获取配置文件名称
FName: =StrPas(IniFileName);
ProgList: =TStringList.Create;
try
//化更新配置信息
InitUpdate(FName) then
begin
UpdateList:=TStringList.Create;
try
//检查需要更新文件
CheckNeedUpdate(ProgList,
UpdateList) then
//执行更新操作
result: =DoUpdate(UpdateList)

result: =0;
finally
UpdateList.Free;
end;
end;
finally
ProgList.Free;
end;
end;
小 结
如果在建立ini文件时没有指定文件目录位置则默认使用Windows系统目录所以在接口时最好用ini文件全路径名称如果不方便给出全路径名称也可以采用“.\filename.ini”形式进行
对于文件是否需要更新员可以根据实际情况来编写判断标准为方便修改中将其写成FileDf(sFiledFile: )形式可以加上文件大小、版本号等条件
为了使更新过程能更加完善建议将本模块及更新配置文件也放在服务器上相应共享目录下并作为待更新文件加到更新文件列表中这样如果服务器端PiUpdate.dll更新了用户PiUpdate.dll也会同样得到更新如果由于功能增加加入了新文件只要将新加文件放到服务器上并修改服务器上更新配置文件工作站上启动时会先将新配置文件复制到本地下次本地再启动时就可以更新新加入文件

Tags:  如何编写程序 怎么编写程序 编写程序 toshiba通用模块

延伸阅读

最新评论

发表评论