我想做个能自动更新文件的软件,但是现在思路不清晰,请高手帮忙。
功能:根据网站上的INI文件(例如:www.gzdc.net/files.ini)和本机的INI文件进行对比,把不同的内容所有关键字显示在例如TREEVIEW或者LISTBOX之类的控件里面。双击某一节点触发以关键字的值为路径的文件
(例如值为:www.gzdc.net/111/1.exe)。
INI文件内容:
[文件名]
金山快译=www.gzdc.net/jsky/jsky.exe双击后能打开金山快译这个安装包,然后进行安装。
功能:根据网站上的INI文件(例如:www.gzdc.net/files.ini)和本机的INI文件进行对比,把不同的内容所有关键字显示在例如TREEVIEW或者LISTBOX之类的控件里面。双击某一节点触发以关键字的值为路径的文件
(例如值为:www.gzdc.net/111/1.exe)。
INI文件内容:
[文件名]
金山快译=www.gzdc.net/jsky/jsky.exe双击后能打开金山快译这个安装包,然后进行安装。
解决方案 »
- 怎么转换?变成百分制 %
- 【请教】别人的程序,按F12查看窗口界面时出错 Class xx not found...
- ■■ 今天得了奖牌,高兴,散分答谢~~~~~
- 求ca-clipper资料
- 建议DELPHI论坛开OLE/Automation子论坛!同意者UP
- 用image显示图片时很大,有什么方法可以按照比例来缩小,以便可以看到整副图片?
- 为什么这个问题没人懂呢…
- 用nmsmtp如何发送html页面?
- 请伸出您的手拉我一把
- 请问在delphi中,利用stringgrid 把数据插入sqlite数据库里,怎样写代码?
- 各位高手快快进来!帮忙看一下这个问题.这是同一个问题开的第二个贴子了!总分有150分!不够再加!
- 请高手们提供:下载Delphi控件的网址,多多益善,最好能带有搜索功能的!!!
就像用IE下载软件用打开,不是另存为的那种效果。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls,DB, DBTables, DBCtrls,Registry,ShellAPI;type
TFm_Update = class(TForm)
GB_Server: TGroupBox;
Lab_Name1: TLabel;
Lab_Name3: TLabel;
GB_Local: TGroupBox;
Lab_Version1: TLabel;
Lab_Version3: TLabel;
Lab_Size1: TLabel;
Lab_Size3: TLabel;
Lab_Date1: TLabel;
Lab_Date3: TLabel;
Btn_Down: TBitBtn;
Btn_Exit: TBitBtn;
Lab_Name2: TLabel;
Lab_Name4: TLabel;
Lab_Version2: TLabel;
Lab_Version4: TLabel;
Lab_Size2: TLabel;
Lab_Size4: TLabel;
Lab_Date2: TLabel;
Lab_Date4: TLabel;
Btn_Up: TBitBtn;
Ani_UpDown: TAnimate;
Btn_Select: TBitBtn;
OD_UpFile: TOpenDialog;
Lab_UpdateTime: TLabel;
Lab_UpdateTime1: TLabel;
DB_Update: TDatabase;
Tab_Update: TTable;
FPrgame: TStringField;
FFT: TBlobField;
Tab_UpdateCsName: TStringField;
QComm: TQuery;
procedure FormShow(Sender: TObject);
procedure Btn_ExitClick(Sender: TObject);
procedure Btn_UpClick(Sender: TObject);
procedure Btn_SelectClick(Sender: TObject);
procedure Btn_DownClick(Sender: TObject);
private
{ Private declarations }
TempPath:String;
procedure GetVerInfo();
function GetRar:Boolean;
public
LocalFile,FileOrgName:String;
Function CompareVersion(VerLocal,VerServer:String):Boolean;
{ Public declarations }
end;var
Fm_Update: TFm_Update;implementationuses UPublic;{$R *.DFM}
procedure TFm_Update.GetVerInfo;
var VerInfo:TFileVersionInfo;
dwSizeLow:DWORD;
FF:Integer;
begin
FF:=FileOpen(LocalFile,fmShareDenyNone);
dwSizeLow := GetFileSize (FF, nil) ;
if dwSizeLow = $FFFFFFFF then
Lab_Size4.Caption:='0'
else
Lab_Size4.Caption:=IntToStr(dwSizeLow); Lab_Name4.Caption:='';
Lab_Version4.Caption:='';
Lab_Date4.Caption:='';
FileClose(FF);
GetFileVerInfo(PChar(LocalFile),VerInfo);
FileOrgName:=VerInfo.OriginalFilename;
if (UpperCase(Trim(FileOrgName))<>UpperCase('dhk.exe'))
and (UpperCase(Trim(FileOrgName))<>UpperCase('FDUpdate.exe')) then
if Pos('winrar.exe',LowerCase(LocalFile))=0 then begin
MessageBox(self.Handle,'要分发的软件信息错误,请重新选择!','错误',MB_ICONERROR);
Exit;
end;
Lab_Name4.Caption:=VerInfo.FileDescription;
Lab_Version4.Caption:=VerInfo .FileVersion;// .fix .FileVersion;
Lab_Date4.Caption:=DateTimeToStr(FileTimeGet(LocalFile,3));
With QComm do begin
Close;
SQL.Clear;
SQL.Add('select ProgramName,CsName,Version,FileSize,FileDate,UpdateTime '+
' from GY_FileUpdate where ProgramName=:FileName ');
ParamByName('FileName').AsString:=Trim(FileOrgName);
Open;
Last;
First;
if IsEmpty or (RecordCount<>1) then begin
Lab_Name3.Caption:='未知';
Lab_Version3.Caption:='未知';
Lab_Size3.Caption:='未知';
Lab_Date3.Caption:='未知';
Lab_UpdateTime1.Caption:='未知';
end else begin
Lab_Name3.Caption:=FieldByName('CsName').AsString;
Lab_Version3.Caption:=FieldByName('Version').AsString;
Lab_Size3.Caption:=FieldByName('FileSize').AsString;
Lab_Date3.Caption:=FieldByName('FileDate').AsString;
Lab_UpdateTime1.Caption:=FieldByName('UpdateTime').AsString;
end;
end;
end;
var sTemp1:String;
Ver:array[0..1,0..3] of Integer;
i,j:Integer;
begin
if (Trim(VerLocal)='未知') or (Trim(VerServer)='未知') then begin
Result:=False;
Exit;
end;
Ver[0,0]:=0; Ver[0,1]:=0;
Ver[0,2]:=0; Ver[0,3]:=0;
Ver[1,0]:=0; Ver[1,1]:=0;
Ver[1,2]:=0; Ver[1,3]:=0;
sTemp1:='';
j:=0;
for i:=1 to Length(VerLocal) do begin
if (Copy(VerLocal,i,1)<>'.') and (i<>Length(VerLocal)) then
sTemp1:=sTemp1+Copy(VerLocal,i,1)
else begin
if i=Length(VerLocal) then
sTemp1:=sTemp1+Copy(VerLocal,i,1);
Try
StrToInt(sTemp1);
Except
sTemp1:='0';
End;
Ver[0,j]:=StrToInt(sTemp1);
sTemp1:='';
j:=j+1;
end;
end;
{ if Trim(sTemp1)<>'' then begin
Try
StrToInt(sTemp1);
Except
sTemp1:='0';
End;
Ver[0,j]:=StrToInt(sTemp1);
end;}
j:=0;
sTemp1:='';
for i:=1 to Length(VerServer) do begin
if (Copy(VerServer,i,1)<>'.') and (i<>Length(VerServer)) then
sTemp1:=sTemp1+Copy(VerServer,i,1)
else begin
if i=Length(VerServer) then
sTemp1:=sTemp1+Copy(VerServer,i,1);
Try
StrToInt(sTemp1);
Except
sTemp1:='0';
End;
Ver[1,j]:=StrToInt(sTemp1);
sTemp1:='';
j:=j+1;
end;
end;
Result:=False;
for i:=0 to 3 do begin
//Local < Server
if Ver[0,i]<Ver[1,i] then begin
Result:=True;//服务器文件比本地新
Exit;
end;
if Ver[0,i]>Ver[1,i] then begin
Result:=False;//服务器文件比本地旧
Exit;
end;
end;
end;procedure TFm_Update.FormShow(Sender: TObject);
var TSize:DWORD;
PathT:PChar;
begin
AdjustProcess;
LocalFile:=Application.ExeName;
try
DB_Update.Params.Clear;
DB_Update.Params.Add('User Name='+__DBUserName);
if __DBUserName='TCManager' then
DB_Update.Params.Add('Password=Longer');
DB_Update.Open;
Except
End;
GetVerInfo();
{ if UpperCase(Trim(FileOrgName))<>UpperCase('xtwh.exe') then begin
Btn_Select.Enabled:=False;
Btn_Up.Enabled:=False;
end;}
TSize:=1000;
GetMem(PathT,TSize);
if GetTempPath(TSize,PathT)=0 then
TempPath:=GetCurrentDir()
else
TempPath:=PathT;
FreeMem(PathT,TSize);
OD_UpFile.InitialDir:=GetCurrentDir;
end;procedure TFm_Update.Btn_ExitClick(Sender: TObject);
begin
Close;
end;procedure TFm_Update.Btn_UpClick(Sender: TObject);
begin
if Pos('winrar.exe',LowerCase(LocalFile))=0 then begin
if ((Trim(Lab_Name4.Caption)='') or (Trim(Lab_Version4.Caption)='')) then begin
MessageBox(self.Handle,'软件信息不全,无法分发!','错误',MB_ICONERROR);
Exit;
end;
if ((Trim(Lab_Version3.Caption)<>'未知') and
(CompareVersion(Trim(Lab_Version4.Caption),Trim(Lab_Version3.Caption)) )) then
Exit;
//判断Winrar.Exe是否存在
if not GetRar then Exit;
FileSetAttr(Trim(TempPath)+'FileUP.exe', 0);
DeleteFile(TempPath+'FileUP.Rar');
CopyFile(PChar(LocalFile),PChar(TempPath+FileOrgName),False);
FileSetAttr(TempPath+FileOrgName, 0);
if Pos('fdupdate.exe',LowerCase(LocalFile))=0 then
LaunchApp(TempPath+'WinRar.exe a '+TempPath+'FileUp.Rar '+TempPath+FileOrgName+' -o+ -m5 -s -dh -y',
'',True,True);
end;
With QComm do begin
Close;
SQL.Clear;
//增加
SQL.Add('delete GY_FileUpdate where ProgramName=:FName ');
SQL.Add('insert into GY_FileUpdate (ProgramName,CsName,Version,FileSize, '+
' FileDate,FileText,UpdateTime) values '+
' (:FName,:CName,:Ver,:FS,:FD,:FT,GetDate())');
if Pos('winrar.exe',LowerCase(LocalFile))=0 then
ParamByName('FName').AsString:=FileOrgName
else
ParamByName('FName').AsString:='WinRar.exe';
ParamByName('CName').AsString:=Lab_Name4.Caption;
ParamByName('Ver').AsString:=Lab_Version4.Caption;
ParamByName('FS').AsString:=Lab_Size4.Caption;
ParamByName('FD').AsString:=Lab_Date4.Caption;
Ani_UpDown.Visible:=True;
self.Update;
if (Pos('winrar.exe',LowerCase(LocalFile))=0) and
(Pos('fdupdate.exe',LowerCase(LocalFile))=0) then
ParamByName('FT').LoadFromFile(TempPath+'FileUp.Rar',ftBlob)
else
ParamByName('FT').LoadFromFile(LocalFile,ftBlob);
Try
ExecSQL;
Ani_UpDown.Visible:=False;
GetVerInfo();
Except
On E:Exception do begin
Ani_UpDown.Visible:=False;
MessageBox(self.Handle,PChar('分发新软件时失败'+#13#10+
Trim(SysErrorMessage( GetLastError() ))),'错误',MB_ICONERROR);
Exit;
end;
End;
end;
FileSetAttr(Trim(TempPath)+'WinRar.exe', 0);
DeleteFile(TempPath+'WinRar.Exe');
FileSetAttr(Trim(TempPath)+'FileUP.exe', 0);
DeleteFile(TempPath+'FileUP.Rar');
FileSetAttr(Trim(TempPath)+'FDUpdate.exe', 0);
DeleteFile(TempPath+'FDUpdate.Exe');
end;
begin
if OD_UpFile.Execute then begin
LocalFile:=OD_UpFile.FileName;
GetVerInfo();
end;
end;procedure TFm_Update.Btn_DownClick(Sender: TObject);
var
Reg:TRegistry;
begin
if not GetRar then Exit;
LocalFile:=Application.ExeName;
GetVerInfo();
if ((Trim(Lab_Name3.Caption)='未知') or (Trim(Lab_Version3.Caption)='未知')) then begin
MessageBox(self.Handle,'已分发软件信息不全,无法下载分发软件更新!','错误',MB_ICONERROR);
Exit;
end;
if not CompareVersion(Trim(Lab_Version4.Caption),Trim(Lab_Version3.Caption)) then
if MessageBox(self.Handle,'已分发软件比本地软件旧,真的要将分发的软件下载更新吗?',
'询问',MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2)=IDNO then Exit;
With QComm do begin
Close;
SQL.Clear;
SQL.Add('select ProgramName from GY_FileUpdate where ProgramName=:FileName ');
ParamByName('FileName').AsString:=Trim(FileOrgName);
Ani_UpDown.Visible:=True;
self.Update;
Open;
Last;
First;
if IsEmpty or (RecordCount<>1) then begin
MessageBox(self.Handle,'无此分发软件或信息不唯一,无法更新!','错误',MB_ICONERROR);
Ani_UpDown.Visible:=False;
GetVerInfo();
Exit;
end;
if FileExists(Trim(TempPath)+FileOrgName) then begin
FileSetAttr(Trim(TempPath)+FileOrgName, 0);
if not DeleteFile(Trim(TempPath)+FileOrgName) then begin
MessageBox(self.Handle,PChar('删除临时目录下的软件失败,不能更新!'+#13#10+
Trim(SysErrorMessage( GetLastError() )) ),'错误',MB_ICONERROR);
Ani_UpDown.Visible:=False;
Exit;
end;
end;
end;//end with QCOMM
//如果FDUpdate.exe存在则删除
if FileExists(Trim(TempPath)+'FDUpdate.exe') then begin
FileSetAttr(Trim(TempPath)+'FDUpdate.exe', 0);
if not DeleteFile(Trim(TempPath)+'FDUpdate.exe') then begin
MessageBox(self.Handle,PChar('删除临时目录下的FDUpdate文件失败!'+
Trim(SysErrorMessage( GetLastError() )) ),'错误',MB_ICONERROR);
Exit;
end;
end;
With Tab_Update do begin
Active:=False;
Filtered:=False;
Filter:='ProgramName='''+'FDUpdate.exe'+'''';
Try
Active:=True;
Filtered:=True;
Except
On E:Exception do begin
MessageBox(self.Handle,PChar('下载更新程序FDUpdate.exe失败,无法更新!'+#13#10+
Trim(SysErrorMessage( GetLastError() )) ),'错误',MB_ICONERROR);
Ani_UpDown.Visible:=False;
GetVerInfo();
Exit;
end;
End;
FFT.SaveToFile(Trim(TempPath)+'FDUpdate.exe');
Active:=False;
Filtered:=False;
Filter:='ProgramName='''+Trim(FileOrgName)+'''';
Try
Active:=True;
Filtered:=True;
Except
On E:Exception do begin
MessageBox(self.Handle,PChar('下载新软件失败,无法更新!'+#13#10+
Trim(SysErrorMessage( GetLastError() )) ),'错误',MB_ICONERROR);
Ani_UpDown.Visible:=False;
GetVerInfo();
Exit;
end;
End;
FileSetAttr(TempPath+'FileUP.Rar', 0);
DeleteFile(TempPath+'FileUP.Rar');
FFT.SaveToFile(Trim(TempPath)+'FileUP.Rar');
Tab_Update.Active:=False;
LaunchApp(TempPath+'WinRar.exe e '+TempPath+'FileUp.Rar '+TempPath+' -o+ -y ','',False,True);
end;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software',True);
Reg.WriteString('FDUpdate1',Trim(TempPath)+FileOrgName);
Reg.WriteString('FDUpdate2',LocalFile);
Reg.WriteString('FDUpdateInfo',Lab_Name4.Caption);
Reg.CloseKey;
Reg.Free;
Ani_UpDown.Visible:=False;
LaunchApp(PChar(Trim(TempPath)+'FDUpdate.exe'),Trim(TempPath),True,False);
Application.Terminate;
end;function TFm_Update.GetRar:Boolean;
begin
With Tab_Update do begin
Active:=False;
Filtered:=False;
Filter:='ProgramName='''+'WinRar.exe'+'''';
//如果winrar.exe存在则删除
if FileExists(Trim(TempPath)+'WinRar.exe') then begin
FileSetAttr(Trim(TempPath)+'WinRar.exe', 0);
if not DeleteFile(Trim(TempPath)+'WinRar.exe') then begin
MessageBox(self.Handle,PChar('删除临时目录下的WinRar文件失败!'+
Trim(SysErrorMessage( GetLastError() )) ),'错误',MB_ICONERROR);
Result:=False;
Exit;
end;
end;
Try
Active:=True;
Filtered:=True;
if RecordCount<>1 then begin
MessageBox(self.Handle,'下载解包工具WinRar.exe失败(数据库内不存在)!','错误',MB_ICONERROR);
Result:=False;
Exit;
end;
FFT.SaveToFile(Trim(TempPath)+'WinRar.exe');
Result:=True;
Active:=False;
Filtered:=False;
Except
on E:Exception do begin
MessageBox(self.Handle,PChar('下载解包工具WinRar.exe失败,无法更新!'+
#13#10+E.Message),'错误',MB_ICONERROR);
Result:=False;
Exit;
end;
End;
end;//end with
end;
FixedInfo:TVSFixedFileInfo; {版本信息}
CompanyName:String; {公司名称}
FileDescription:String; {说明}
FileVersion:String; {文件版本}
InternalName:String; {内部名称}
LegalCopyright:String; {版权}
LegalTrades:String; {合法商标}
OriginalFilename:String; {源文件名}
ProductName:String; {产品名称}
ProductVersion:String; {产品版本}
Comments:String; {备注}
end;
//执行处部可执行文件
Function LaunchApp(pExePath,WorkDir:String;ShowWindow,WaitFlag:Boolean):Boolean;
var ExePath : array[0..512] of char;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(exePath, pExePath);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
if ShowWindow then
StartupInfo.wShowWindow := 1
else
StartupInfo.wShowWindow := 0;
if not CreateProcess(nil,
ExePath,
nil,
nil,
false,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo) then begin
Result:=False;
Exit;
end else begin
if WaitFlag then
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
Result:=True;
end;
end;Function GetFileVerInfo(ExeFileName :Pchar;var VerSionInfo:TFileVersionInfo):Boolean;
var
dwHandle, dwVersionSize : DWORD;
Find : String;
pcBuffer : PChar;
pTemp : Pointer;
FileVersionInfo : TVSFixedFileInfo;
begin
Find := '\';
dwVersionSize := GetFileVersionInfoSize( PChar(ExeFilename),dwHandle );
if dwVersionSize = 0 then begin
Result:=False;
Exit;
end;
GetMem( pcBuffer, dwVersionSize );
if not GetFileVersionInfo( PChar(ExeFilename),dwHandle,dwVersionSize,pcBuffer ) then begin
FreeMem(pcBuffer);
Result:=False;
Exit;
end;
if not VerQueryValue( pcBuffer,PChar(Find),pTemp,dwVersionSize ) then begin
FreeMem(pcBuffer);
Result:=False;
Exit;
end;
FileVersionInfo:=PVSFixedFileInfo(pTemp)^;
With FileVersionInfo do begin
VersionInfo.FixedInfo.dwSignature:=dwSignature;
VersionInfo.FixedInfo.dwStrucVersion:=dwStrucVersion;
VersionInfo.FixedInfo.dwFileVersionMS:=dwFileVersionMS;
VersionInfo.FixedInfo.dwFileVersionLS:=dwFileVersionLS;
VersionInfo.FixedInfo.dwProductVersionMS:=dwProductVersionMS;
VersionInfo.FixedInfo.dwProductVersionLS:=dwProductVersionLS;
VersionInfo.FixedInfo.dwFileFlagsMask:=FileVersionInfo.dwFileFlagsMask;
VersionInfo.FixedInfo.dwFileFlags:=fileVersionInfo.dwFileFlags;
VersionInfo.FixedInfo.dwFileOS:=FileVersionInfo.dwFileOS;
VersionInfo.FixedInfo.dwFileType:=FileVersionInfo.dwFileType;
VersionInfo.FixedInfo.dwFileSubtype:=FileVersionInfo.dwFileSubtype;
VersionInfo.FixedInfo.dwFileDateMS:=FileVersionInfo.dwFileDateMS;
VersionInfo.FixedInfo.dwFileDateLS:=FileVersionInfo.dwFileDateLS;
end;
Find := '\StringFileInfo\080403A8\';
if VerQueryValue( pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize ) then
VersionInfo.CompanyName:=PChar(pTemp)
else begin
Find := '\StringFileInfo\040904E4\';
if VerQueryValue( pcBuffer,PChar(Find+'CompanyName'),pTemp,dwVersionSize ) then
VersionInfo.CompanyName:=PChar(pTemp)
else begin
Result:=False;
Exit;
end;
end;
if VerQueryValue( pcBuffer,PChar(Find+'FileDescription'),pTemp,dwVersionSize ) then
VersionInfo.FileDescription:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'FileVersion'),pTemp,dwVersionSize ) then
VersionInfo.FileVersion:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'InternalName'),pTemp,dwVersionSize ) then
VersionInfo.InternalName:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'LegalCopyright'),pTemp,dwVersionSize ) then
VersionInfo.LegalCopyright:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'LegalTrades'),pTemp,dwVersionSize ) then
VersionInfo.LegalTrades:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'OriginalFilename'),pTemp,dwVersionSize ) then
VersionInfo.OriginalFilename:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'ProductName'),pTemp,dwVersionSize ) then
VersionInfo.ProductName:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'ProductVersion'),pTemp,dwVersionSize ) then
VersionInfo.ProductVersion:=PChar(pTemp); if VerQueryValue( pcBuffer,PChar(Find+'Comments'),pTemp,dwVersionSize ) then
VersionInfo.Comments:=PChar(pTemp);
FreeMem(pcBuffer );
Result:=True;
end;
Registry,
SysUtils,
Windows;{$R *.RES}
var Reg:TRegistry;
File1,File2,FileInfo:String;
CopyOk:Boolean;
ReTry:Integer;
begin
Reg:=TRegistry.Create;
Try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software',True);
File1:=PChar(Reg.ReadString('FDUpdate1'));
File2:=PChar(Reg.ReadString('FDUpdate2'));
FileInfo:=PChar(Reg.ReadString('FDUpdateInfo'));
if Trim(FileInfo)<>'' then
FileInfo:='<'+FileInfo+'>';
if not (((Trim(File1)='') or (Trim(File1)=''))) then begin
ReTry:=0;
CopyOk:=False;
FileSetAttr(Trim(File2)+'.bak', 0);
if CopyFile(PChar(File2),PChar(Trim(File2)+'.bak'),False) then
MessageBox(0,PChar('原软件已经备份为'+File2+'.bak !'),'完成',MB_ICONINFORMATION);
While not CopyOk do begin
FileSetAttr(File1, 0);
FileSetAttr(File2, 0);
if CopyFile(PChar(File1),PChar(File2),False) then begin
MessageBox(0,PChar(FileInfo+'已经完成更新!'),'完成',MB_ICONINFORMATION);
Reg.WriteString('FDUpdate1','');
Reg.WriteString('FDUpdate2','');
Reg.WriteString('FDUpdateInfo','');
CopyOk:=True;
WinExec(PChar(File2),SW_SHOWNORMAL);
end else begin
CopyOk:=False;
Sleep(2000);
ReTry:=ReTry+1;
end;
if ReTry=10 then begin
CopyOk:=True;
MessageBox(0,PChar(FileInfo+'未完成更新!'+#13#10+
'错误信息:'+Trim(SysErrorMessage( GetLastError() )) ),'错误',MB_ICONERROR);
end;
end;//end while CopyOk not True
end;
Finally
Reg.CloseKey;
Reg.Free;
End;
end.
drop table [dbo].[GY_FileUpdate]
GOCREATE TABLE [dbo].[GY_FileUpdate] (
[ProgramName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[CsName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Version] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[FileSize] [int] NOT NULL ,
[FileDate] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[FileText] [image] NOT NULL ,
[UpdateTime] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO