现在的位置: 首页 > 综合 > 正文

使用 TIdHTTP 实现在线升级

2013年09月07日 ⁄ 综合 ⁄ 共 1498字 ⁄ 字号 评论关闭

       其实很早就想做个这样的东西了,一直没有机会,确切的说,一直没有足够的动力。这次总算能够如愿以偿了,原因很简单,自己早些时候做的另外一个系统由于经常需要做修改,时间一长就烦了,于是决定不管怎么样也要写个在线更新的程序出来。。。。

      最初的设想是做一个与 Symantec LiveUpdate 类似的东东,但是后来发现这么多下一步涉及到界面上的很多东西,比较烦人,所以就做成现在这样了,个人感觉清清爽爽也挺好的:)

LiveUpdate.jpg

 细说起来,其实这个程序很简单,简单到只要使用一个Delphi7提供的现成的控件(Indy->TIdHTTP)就可以了,所有诸如与网站连接,下载一个文件等等它都已经帮你实现了,你所要做的是:

1。在网站上放一个升级用的配置文件(如INI),里面包含需要更新的文件/参数等,还有就是升级文件本身了
2。下载配置文件,分析其内容,确定需要下载的文件名称,文件大小(用于下载进度控制),是否需要注册(如OCX控件),是否被压缩过(如果文件太大)等任何你感兴趣的内容。。。
3。下载。。。。
4。将下载的文件覆盖掉需要更新的文件
5。善后工作,可能需要清除下载的文件,如果你把他们放在系统临时文件夹的话,就不需要了

如果你以前从来都没用过Indy组件,那么唯一的难点就是如何在使用 TIdHTTP 时能显示下载进度,此时应该使用 TIdHTTP 的 OnWork, OnWorkBegin, OnWorkEnd 三个事件,参考代码如下:

procedure TForm1.HTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Max := AWorkcountMax;
  if AWorkCountMax > 0 then
    StatusBar1.Panels[1].Text := 'Transfering: ' + IntToStr(AWorkCountMax);
end;

procedure TForm1.HTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  StatusBar1.Panels[1].Text := 'Done';
  ProgressBar1.Position := 0;
end;

procedure TForm1.HTTPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  if ProgressBar1.Max > 0 then
  begin
    StatusBar1.Panels[1].Text := IntToStr(AWorkCount) + ' bytes of ' +
      IntToStr(ProgressBar1.Max) + ' bytes.';
    ProgressBar1.Position := AWorkCount;
  end
  else
    StatusBar1.Panels[1].Text := IntToStr(AworkCount) + ' bytes.';
end;

做完这一切后,你会发现无论如何你的进度条就是没反应,呵呵,这不是你的问题,原因在于你必须手动将这三个函数指定给你的 TIdHTTP 变量:

 http.OnWork := idWork;
 http.OnWorkBegin := idWorkBegin;
 http.OnWorkEnd := idWorkEnd;

好了,欣赏一下自己的杰作吧。。。

抱歉!评论已关闭.