📄 hwupgrade.pas.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 + -