CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

我应该怎样下手制作系统的升级程序呢?请各位大虾给点指导!

楼主mypiip(逆水行舟)2003-11-01 15:49:57 在 Delphi / VCL组件开发及应用 提问

我只要制作了升级程序,客户只要点击升级即可,而不管系统安装路径是什么! 问题点数:100、回复次数:12Top

1 楼prettysky(浪际天涯)回复于 2003-11-01 15:53:31 得分 0

你要升级什么啊?你自己的程序还是Windows?Top

2 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-01 15:54:48 得分 5

將   系统安装路径   寫到註冊表!!!Top

3 楼dickeybird888(小鸟)回复于 2003-11-01 15:55:01 得分 10

你只要知道应用服务器的路经就可以拉,而且可以不用用户点,而自动升级:  
  1。现在的自动升级主要有两种方法,1是探测版本好,2.探测文件时间!  
  比较好的就是探测版本号的方法!  
  Top

4 楼dickeybird888(小鸟)回复于 2003-11-01 15:57:49 得分 0

有问题的话,发消息给我!Top

5 楼mypiip(逆水行舟)回复于 2003-11-01 16:04:35 得分 0

是俺自己的程序,dickeybird888(于伟刚)   ,能不能给一些具体的描述?以前没有接触过,非常的不懂,而且我不想让我的程序在注册表里留下痕迹!谢谢!Top

6 楼gegangqiao(困惑的男人)回复于 2003-11-01 20:54:27 得分 5

查看当前打开的程序的路径和建立或者是修改时间,然后再读取服务器的对应资料进行比较低。Top

7 楼mypiip(逆水行舟)回复于 2003-11-03 07:55:52 得分 0

upTop

8 楼tresss(破天惊)回复于 2003-11-03 08:22:15 得分 10

在软件的第一个版本就应该想到这个问题!  
   
  第一次安装时在注册表的一个地方写入一个键,写入安装的路径和版本,升级时读如,如此就可以得到路径了.而且还可以对比一下是不是以前的版本,如果是以前的版本则进行升级,如果已安装的版本比要安装的版本高刚停止更新!!Top

9 楼inforum(诚实做人 勤奋做事)回复于 2003-11-03 08:51:19 得分 3

studyTop

10 楼prettysky(浪际天涯)回复于 2003-11-03 15:11:11 得分 5

你可以把最新的版本号和下载地址,放在某一个FTP上面。  
  软件每次运行都会登陆上述FTP检查最新的版本,如果有新的就会按照上面写的下载地址去下载  
  然后提示用户安装Top

11 楼coolfilm(苏飞工作室)回复于 2003-11-04 09:39:48 得分 60

目前,大多数商业软件都提供一种“在线升级”的功能,用户只需上网点几下鼠标即可完成程序的更新升级。笔者所在的单位拥有一个连接了上百台计算机的局域网,上面运行着一套信息管理系统。为解决客户端应用程序的更新升级,笔者编制了一个实现自动更新功能的模块。该模块能在不同的编程语言中实现升级功能,具有一定的通用性和灵活性。本文介绍该模块(PiUpdate)的设计思路和实现方法。  
     
     
  实现原理    
  PiUpdate模块的基本设计思想是将要更新的文件放在文件服务器上,工作站上的程序启动时调用PiUpdate,   对比服务器上的文件和本地的文件,如发现有新文件,则更新本地的对应文件。    
  首先,考虑到通用性的要求,将该模块设计成一个Windows标准的动态链接库(DLL),并在DLL中提供一个接口函数供其他程序调用。由于几乎各种开发工具都支持DLL调用机制,这样就保证了模块的通用性。    
  其次,为了灵活控制具体的更新文件,笔者使用了一个ini文件来提供相关的更新信息。ini文件名在主程序调用DLL接口函数时传入程序。    
  接口函数的定义形式如下:    
  function   ExecuteUpdate(IniFileName:Pchar):integer;   stdcall;    
  如果更新成功,则返回0,如果出现错误,则返回-1;   当将要更新的文件被运行中的应用程序使用时,接口函数会向主程序返回1。    
  接口函数的调用形式如下:    
  Delphi调用:function   ExecuteUpdate(inifilename:pchar):integer;stdcall;external   ‘PiUpdate.dll’;    
  PB调用:function   integer   ExecuteUpdate(ref   string   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      
  if   exist   destfile   goto   loop      
  copy   tmpfile   destfile    
  del   tmpfile    
  del   .\del.bat    
  由于del.BAT运行后会一直执行,直到成功地删除了目标文件为止,所以主程序在检测到接口函数ExecuteUpdate返回值为1时,要立即退出,以便del.BAT能顺利地执行下去。    
  程序实现    
  主程序的实现代码如下:    
  function   ExecuteUpdate(IniFileName:   Pchar):integer;    
  //返回值:0   更新成功;-1   更新出错;   1   要更新的文件正在使用,需要立即退出程序    
  begin    
  result:   =-1   ;    
  //获取配置文件名称    
  FName:   =StrPas(IniFileName);      
  ProgList:   =TStringList.Create;    
  try    
  //初始化更新配置信息    
  if   InitUpdate(FName)   then    
  begin    
  UpdateList:=TStringList.Create;    
  try    
  //检查需要更新的文件    
  if   CheckNeedUpdate(ProgList,    
  UpdateList)   then      
  //执行更新操作    
  result:   =DoUpdate(UpdateList)      
  else    
  result:   =0;    
  finally    
  UpdateList.Free;    
  end;    
  end;    
  finally    
  ProgList.Free;    
  end;    
  end;    
  小   结    
  如果在建立ini文件时,没有指定文件的目录位置,则默认使用Windows的系统目录,所以在调用接口函数时最好用ini文件的全路径名称。如果不方便给出全路径名称,也可以采用“.\filename.ini”的形式进行调用。    
  对于文件是否需要更新,程序员可以根据实际情况来编写判断标准。为方便修改,在程序中将其写成函数FileDiff(sFile,dFile:   string)的形式,可以加上文件大小、版本号等条件。    
  为了使更新过程能更加完善,建议将本模块及更新配置文件也放在服务器上相应的共享目录下,并作为待更新的文件加到更新文件列表中。这样一来,如果服务器端的PiUpdate.dll更新了,用户的PiUpdate.dll也会同样得到更新。如果由于程序功能的增加,加入了新的文件,只要将新加的文件放到服务器上,并修改服务器上的更新配置文件,工作站上的程序启动时会先将新的配置文件复制到本地,下次本地程序再启动时就可以更新新加入的文件。    
     
  Top

12 楼WGYKING(修罗是谁?![就缺孩子了……])回复于 2003-11-04 12:20:52 得分 2

......  
  学习Top

相关问题

  • 程序升级???
  • j2me程序 自动升级!!!
  • PB程序实时升级
  • 做个最小的GUI helloworld程序,请高手指导指导
  • pb6.5的程序如何升级到pb7?
  • delphi5升级程序的注册码
  • 在线升级程序的讨论?
  • 自动升级程序(加急)
  • 哪有8.03的升级程序下载
  • 程序升级ActiveX DLL问题,求教。

关键词

  • 文件
  • 函数
  • 模块
  • 接口
  • 版本
  • 服务器
  • 安装
  • 系统
  • 更新
  • 程序

得分解答快速导航

  • 帖主:mypiip
  • aiirii
  • dickeybird888
  • gegangqiao
  • tresss
  • inforum
  • prettysky
  • coolfilm
  • WGYKING

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo