⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwupgrade.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
字号:
unit HwUpgrade;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Buttons, ExtCtrls;

type
  THwUpgradeForm = class(TForm)
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    bbtnExit: TBitBtn;
    ProgressBar2: TProgressBar;
    bbtnUpgrade: TBitBtn;
    Label2: TLabel;
    IdHTTP1: TIdHTTP;
    Bevel1: TBevel;
    procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    procedure IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
    procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure FormCreate(Sender: TObject);
    procedure bbtnUpgradeClick(Sender: TObject);
    procedure bbtnExitClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    procedure SetInteface;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  HwUpgradeForm: THwUpgradeForm;

implementation

uses CommFun;

{$R *.dfm}

procedure DownloadFile(ASourceFile,ATargetFile,AUrl,AProxy,AProxyPort:string);
var
  AFileStream:TFileStream;
begin
  if not GetOnlineStatus then
  begin
    ShowMsg('UMS10000194');  //计算机没有连接到因特网,请检查是否已上网或网线是否通畅
    Abort;
  end;
  ASourceFile:=AUrl+ASourceFile;
  if (AProxy<>'') and (AProxy<>'0') then HwUpgradeForm.IdHTTP1.Request.ProxyServer:=AProxy;
  if (AProxyPort<>'') and (AProxyPort<>'0') then HwUpgradeForm.IdHTTP1.Request.ProxyPort:=StrToInt(AProxyPort);
  AFileStream:=TFileStream.Create(ATargetFile,fmCreate);
  try
    try
      HwUpgradeForm.IdHTTP1.Get(ASourceFile,AFileStream);
    except
      ShowMsg(GetDBString('UMS10000195')+ASourceFile,1);  //没有存在所需的文件:
      Abort;
    end;
  finally
    AFileStream.Free;
  end;
end;

procedure UpgradeFile(AStringList:TStringList;AUrl,AProxy,AProxyPort:string;ALabel:TLabel);
var
  I:Integer;
  APath,S:string;
  ADate:TDateTime;
begin
  APath:=ExtractFilePath(Paramstr(0));
  if APath[Length(APath)]<>'\' then APath:=APath+'\Download\' else APath:=APath+'Download\';

  for I:=0 to AStringList.Count-1 do
  begin
    HwUpgradeForm.ProgressBar2.Position:=HwUpgradeForm.ProgressBar2.Position+1;
    //取得文件名
    S:=ExtractFileName(AStringList[I]);
    ALabel.Caption:=GetDBString('UMS10000196')+S;  //正在下载文件:
    HwUpgradeForm.Update;
    DownloadFile(S,APath+S,AUrl,AProxy,AProxyPort);
    //设置下载文件日期
    ADate:=ReadIniFile('.\Upgrade.ini',S,'Date',4);
    FileSetDate(APath+S,DateTimeToFileDate(ADate));
  end;
end;

procedure THwUpgradeForm.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max:=AWorkCountMax;
end;

procedure THwUpgradeForm.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position:=ProgressBar1.Max;
  if ProgressBar2.Position<>ProgressBar2.Max then ProgressBar1.Position:=0;
end;

procedure THwUpgradeForm.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Application.ProcessMessages;
  ProgressBar1.Position:=AWorkCount;
end;

procedure THwUpgradeForm.SetInteface;
begin
  Label1.Caption:=GetDBString('COM00005029');  //请单击升级按扭进行智能升级...
  Label2.Caption:=GetDBString('COM00005030');  //总进度...
  bbtnUpgrade.Caption:=GetDBString('COM00005031');  //升级(&U)
  bbtnExit.Caption:=GetDBString('COM00005032');  //退出(&X)
end;

procedure THwUpgradeForm.FormCreate(Sender: TObject);
begin
  SetInteface;
end;

procedure THwUpgradeForm.bbtnUpgradeClick(Sender: TObject);
var
  APath,AUrl:string;
  AUpdateFile,AStringList:TStringList;
  AIniFile,AWeb:string;
  AProxy,AProxyPort:string;
  I:Integer;
  S:String;
begin
//升级
  AUpdateMain:=False;
  bbtnUpgrade.Enabled:=False;
  Label1.Caption:=GetDBString('COM00005027');  //正在获取最新信息...
  Update;
  //设置下载文件的存放路径
  APath:=ExtractFilePath(Paramstr(0));
  if APath[Length(APath)]<>'\' then APath:=APath+'\Download\' else APath:=APath+'Download\';
  //创建目录
  CreateDirectory(APath);
  APath:=ExtractFilePath(Paramstr(0));
  if APath[Length(APath)]<>'\' then APath:=APath+'\Backup\' else APath:=APath+'Backup\';
  CreateDirectory(APath);
  AUpdateFile:=TStringList.Create;
  
  AUrl:=GetSysParams('SYS0015');  //下载网址
  if AUrl[Length(AUrl)]<>'/' then AUrl:=AUrl+'/';
  AProxy:=GetSysParams('SYS0013');  //代理服务器地址
  AProxyPort:=GetSysParams('SYS0014');  //代理服务器端口
  APath:=ExtractFilePath(Paramstr(0));
  if APath[Length(APath)]<>'\' then APath:=APath+'\';

  try
    Application.ProcessMessages;
    DownloadFile('Upgrade.ini',APath+'Upgrade.ini',AUrl,AProxy,AProxyPort);
  except
    bbtnUpgrade.Enabled:=True;
    Label1.Caption:=GetDBString('COM00005029');  //请单击升级按扭进行智能升级...
    Update;
    Raise;
    Abort;
  end;

  //生成本地文件信息
  Label1.Caption:=GetDBString('COM00005033');  //获取您电脑中的文件信息...
  Update;
  AIniFile:=APath+'VerInfo.ini';
  if FileExists(AIniFile) then DeleteFile(AIniFile);
  SearchFile(APath,AIniFile);

  //比较本地文件与升级文件信息
  Label1.Caption:=GetDBString('COM00005034');  //比较本地文件与升级文件信息...
  Update;
  AWeb:=APath+'Upgrade.ini';
  if not CheckUpgrade(AWeb,AIniFile,AUpdateFile) then
  begin
    Label1.Caption:=GetDBString('COM00005028');  //您所使用的是最新版软件
    Update;
    ShowMsg('COM00005028');  //您所使用的是最新版软件
    ModalResult:=1;
  end else
  begin
    //关闭浩晖事务服务控制器
    CloseHwTSC;
    //保存要下载文件列表
    AUpdateFile.SaveToFile(APath+'Download\'+FormatDateTime('yyyy-mm-dd hh.mm.ss',Now)+'.txt');

    //下载要升级的文件
    try
      ProgressBar2.Position:=0;
      ProgressBar2.Max:=AUpdateFile.Count;
      UpgradeFile(AUpdateFile,AUrl,AProxy,AProxyPort,Label1);
    except
      ShowMsg('UMS10000201');  //下载升级失败
      bbtnUpgrade.Enabled:=True;
      Label1.Caption:=GetDBString('COM00005029');  //请单击升级按扭进行智能升级...
      Update;
      Abort;
    end;

    //创建升级批处理文件
    AStringList:=TStringList.Create;
    for I:=0 to AUpdateFile.Count-1 do
    begin
      S:=AUpdateFile[I];
      ReplaceString(ExtractFilePath(Application.ExeName),'.\',S);
      CopyFile(PChar(S),PChar(APath+'Backup\'+ExtractFileName(S)),False); //备份要升级的文件

      AStringList.Add(':'+IntToStr(I));
      AStringList.Add('del '+S);
      AStringList.Add('if exist '+S+' goto '+IntToStr(I));
      AStringList.Add('copy .\Download\'+ExtractFileName(S)+' '+S);

      AUpdateMain:=True;
    end;
    if AUpdateMain then
    begin
      AStringList.Add('del %0');
      AStringList.SaveToFile(APath+'_deleteme.bat');
    end;
    AStringList.Free;

    ShowMsg('UMS10000203');  //升级完成,请重新登录系统
    ModalResult:=1;
  end;
end;

procedure THwUpgradeForm.bbtnExitClick(Sender: TObject);
begin
//退出
  Close;
end;

procedure THwUpgradeForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_F1 then
    HtmlHelp(Application.Handle, AHelpFile+'::/HwUpgrade.htm', $0000, nil);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -