up

转载 2004年07月10日 09:58:00

unit up;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  StdCtrls, ExtCtrls, RzPanel, IniFiles, RzStatus, IdHTTP, IdGlobal, Registry,
  rwIni;

type
  TUpdate = class(TObject)
  private
    xrwIni: TrwIni;
    GetVersion: TRzVersionInfo;
    httpGet: TIdHTTP;
  public
    function DownFiles: Boolean;
    function CompStr(Src, Dst: string): Boolean;
    function CheckVersion: Boolean;
    constructor Create; overload;
    destructor Destroy; override;
  end;

var
  xUpdate: TUpdate;

implementation

function TUpdate.CompStr(Src, Dst: string): Boolean;
var
  i: integer;
  iSrc: string;
  iDst: string;
begin
  Result := True;
  for i := 0 to 3 do
  begin
    iSrc := Copy(Src, 0, pos('.', Src) - 1);
    Src := Copy(Src, pos('.', Src) + 1, Length(Src) - pos('.', Src) + 1);
    if not (pos('.', Src) > 0) then iSrc := Src;
    iDst := Copy(Dst, 0, pos('.', Dst) - 1);
    Dst := Copy(Dst, pos('.', Dst) + 1, Length(Dst) - pos('.', Dst) + 1);
    if not (pos('.', Dst) > 0) then iDst := Dst;
    try
      if StrToInt(iSrc) < StrToInt(iDst) then
      begin
        Result := False;
        Break;
      end;
    except
      Result := False;
      Break;
    end;
  end;
end;

function TUpdate.DownFiles: Boolean;
var
  i, iFileHandle: integer;
  Version: string;
  AppIni: TiniFile;
  g_path: string;
  url: string;
  upgrade: string;
  files: TStrings;
  IniFile: TMemoryStream;
begin
  url := xrwIni.hkReadString('Server');
  if url = '' then url := 'http://www.big1163.com/';
  if Copy(url, Length(url), 1) <> '/' then url := url + '/';
  url := url + 'superform/';

  g_path := ExtractFilePath(application.ExeName);
  IniFile := TMemoryStream.Create;
  try
    httpGet.Get(url + 'update.ini', IniFile);
    IniFile.SaveToFile(g_path + 'update/update.ini');
  except
    Result := False;
    FreeAndNil(IniFile);
    Exit;
  end;

  try
    Files := TStringlist.Create;
    AppIni := TIniFile.Create(g_path + '/update/update.ini');
    AppIni.ReadSections(files);
    for i := 0 to files.Count - 1 do
    begin
      try
        if pos(uppercase('setup.exe'), uppercase(files[i])) > 0 then
        begin
          GetVersion.FilePath := g_path + ExtractFileName(Application.ExeName);
          version := GetVersion.FileVersion;
        end
        else
        begin
          GetVersion.FilePath := g_path + files[i];
          Version := GetVersion.FileVersion;
        end;
        if pos('Value', Version) > 0 then Version := '1.0.0.0';

        if CompStr(Version, Appini.ReadString(files[i], 'Ver', '1.0.0.1')) then
        begin
          Continue;
        end;
        IniFile.Clear;
        httpGet.Get(url + files[i], IniFile);
        IniFile.SaveToFile(g_path + 'update/' + files[i]);
      except

      end;
    end;

    FreeAndNil(IniFile);
{
    for i := 0 to files.Count - 1 do
    begin
      try
        if FileExists(g_path + 'update/' + files[i]) then
          DeleteFile(g_path + files[i]);
      except

      end;
    end;

    for i := 0 to files.Count - 1 do
    begin
      try
        if FileExists(g_path + 'update/' + files[i]) then
        begin
          if CopyFileTo(g_path + 'update/' + files[i], g_path + files[i]) then
            DeleteFile(g_path + 'update/' + files[i]);
        end;
      except

      end;
    end;
}   
  finally
    AppIni.free;
    files.Free;
  end;
end;

function TUpdate.CheckVersion: Boolean;
var
  i, iFileHandle: integer;
  Version: string;
  AppIni: TiniFile;
  g_path: string;
  url: string;
  upgrade: string;
  files: TStrings;
  IniFile: TMemoryStream;
begin
  url := xrwIni.hkReadString('Server');
  if url = '' then url := 'http://www.big1163.com/';
  if Copy(url, Length(url), 1) <> '/' then url := url + '/';
  url := url + 'superform/';

  g_path := ExtractFilePath(application.ExeName);
  IniFile := TMemoryStream.Create;
  try
    httpGet.Get(url + 'update.ini', IniFile);
    IniFile.SaveToFile(g_path + 'update/update.ini');
  except
    Result := False;
    FreeAndNil(IniFile);
    Exit;
  end;

  try
    Files := TStringlist.Create;
    AppIni := TIniFile.Create(g_path + '/update/update.ini');
    AppIni.ReadSections(files);
    for i := 0 to files.Count - 1 do
    begin
      try
        if pos(uppercase('setup.exe'), uppercase(files[i])) > 0 then
        begin
          GetVersion.FilePath := g_path + ExtractFileName(Application.ExeName);
          version := GetVersion.FileVersion;
        end
        else
        begin
          GetVersion.FilePath := g_path + files[i];
          Version := GetVersion.FileVersion;
        end;
        if pos('Value', Version) > 0 then Version := '1.0.0.0';
        if Appini.ReadString(files[i], 'Ver', '') = '' then Continue;
        if CompStr(Version, Appini.ReadString(files[i], 'Ver', '1.0.0.1')) then
        begin
          Continue;
        end;
        Result := True;
        Break;
      except

      end;
    end;
  finally
    AppIni.free;
    files.Free;
  end;
end;

constructor TUpdate.Create;
begin
  xrwIni := TrwIni.Create(nil);
  xrwIni.RegistryPath := '/Software/supermail/';
  GetVersion := TRzVersionInfo.Create(nil);
  httpGet := TIdHTTP.Create(nil);
  inherited Create;
end;

destructor TUpdate.Destroy;
begin
  xrwIni.Free;
  GetVersion.Free;
  httpGet.Free;
  inherited;
end;

end.

 

如何解决SVN的clean up问题

SVN执行clean up时经常出现Previous operation has not finished; run 'cleanup' if it was interrupted这种错误信息,现提供...
  • kuubao
  • kuubao
  • 2017年04月23日 21:42
  • 1592

一种一天成为高手的另类Sketch up速成法

|举报|字号 订阅 【导读】本法具有特别的高效性,您不必为厚厚的教科书发愁,也不必为网上众多资料而担心时间不够,拥有教学经验、善于自学、擅长电脑以及本身就在建筑设计院...
  • cuhkljt
  • cuhkljt
  • 2014年05月28日 00:19
  • 1308

Latchup现象和预防措施

Latch up 是指cmos晶片中, 在电源power VDD和地线GND(VSS)之间由于寄生的PNP和NPN双极性BJT相互影响而产生的一低阻抗通路, 它的存在会使VDD和GND之间产生大电流 ...
  • luckywang1103
  • luckywang1103
  • 2013年10月21日 13:54
  • 4950

bring UP 需要做的工作

bring UP 需要做的工作 1、kernelspace sensor driver : 驱动和设备树 2、userspace camera 对应的chromat...
  • mmmccc000
  • mmmccc000
  • 2016年11月17日 15:29
  • 333

信号量机制中的DOWN操作与UP操作详解

DOWN操作:linux内核中,对信号量的DOWN操作有如下几种: void down(struct semaphore *sem); //不可中断 int down_interruptible(st...
  • fzubbsc
  • fzubbsc
  • 2014年07月13日 11:48
  • 2170

svn清理失败(clean up失败)的解决方法

关于svn 清理失败 (clean up 失败) 的解决方法:    step1: 到 sqlite官网 (http://www.sqlite.org/download.html) 下载 sqlit...
  • wh_forever
  • wh_forever
  • 2016年06月28日 16:53
  • 1119

高通平台手机开发之Bring-up

手机Bring-up 3.1. Linux 部分编译 高通的代码分两部分:一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载。 将高通...
  • Winva
  • Winva
  • 2016年02月25日 17:06
  • 2988

HDU-4612-Warm up(无向图缩点+直径)

Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total...
  • qq978874169
  • qq978874169
  • 2016年04月28日 19:15
  • 768

临界资源 互斥访问 内核中的up和down函数

信号量(semaphore)是用于保护临界区的一种常用方法。只有得到信号量的进程才能执行临界区代码,而没有得到信号量的进程进入休眠等待状态。 Linux系统中与信号量相关的操作主要有如下4种。 1 定...
  • trochiluses
  • trochiluses
  • 2013年07月16日 09:29
  • 3703

最全Tortoise SVN Clean up失败的解决方法合集

前言 svn又一次出现问题,cleanup 失败,真是一年不出现,出现就要命啊,还记得我上次写文章记录出现的问题还是在2014年,请看SVN cleanup 失败的解决方法。 工作环境 ...
  • u010832643
  • u010832643
  • 2017年02月14日 18:52
  • 14248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:up
举报原因:
原因补充:

(最多只允许输入30个字)