📄 sws_update.pas
字号:
zeromemory(@buf1, sizeof(buf1));
rec1 := Form_Update.ClientSocket1.Socket.ReceiveBuf(buf1, sizeof(buf1));
If real_reclen1 >= reclen1 Then
Begin
//showmessage('文件已经下载完毕了!');
result := true;
Form_Update.Memo1.Lines.Add(Form_update.serfilename + '实际收到文件长度大于服务器标识长度,跳过下载' + #13#10);
break;
End;
If pos1 = reclen1 Then
Begin
//showmessage('文件已经下载完毕了!');
result := true;
Form_Update.Memo1.Lines.Add(Form_update.serfilename + '当前长度大于服务器标识长度,跳过下载' + #13#10);
break;
End;
blockwrite(f1, buf1, rec1);
real_reclen1 := real_reclen1 + rec1;
//显示下载进度
Form_Update.RzLabel4.caption := '共 ' + FormatFloat('#,##', reclen1) + ' 字节,已下载 ' + FormatFloat('#,##', real_reclen1) + ' 字节';
Form_Update.Gauge_process.MaxValue := reclen1;
Form_Update.Gauge_process.Progress := real_reclen1;
application.ProcessMessages;
End;
closefile(f1);
Form_Update.ClientSocket1.Active := false;
Except
closefile(f1);
result := false;
Form_Update.Memo1.lines.add(Form_update.serfilename + '服务器连接失败,取消下载' + #13#10);
End;
End;
Procedure TForm_Update.ListBox_serversClick(Sender: TObject);
Var i : integer;
Begin
Edt_url.Text := '';
For i := 0 To ListBox_servers.Items.Count - 1 Do
If ListBox_servers.Selected[i] Then
Begin
Try
AppIni := TIniFile.Create(g_path + '\chis.ini');
Edt_url.Text := AppIni.ReadString('update', ListBox_servers.Items[i], 'http://');
Finally
AppIni.Free;
End;
End;
End;
Procedure TForm_Update.FormShow(Sender: TObject);
Begin
btn_next.SetFocus;
RzPageControl1.HideAllTabs;
End;
Procedure TForm_Update.FormClose(Sender: TObject;
Var Action: TCloseAction);
Begin
Try
HTTPFiles.Disconnect;
Except
End;
files.Free;
End;
Function TForm_Update.ExistNewFile: Boolean;
Var i {, iFileHandle}: integer;
filestr : TStringList;
Begin
result := false;
filestr := TStringList.Create;
files.Clear;
Try
If copy(Edt_url.Text, length(Edt_url.Text), 1) <> '/' Then
Edt_url.Text := Edt_url.Text + '/';
filestr.Add(HTTPFiles.Get(Edt_url.Text + sys_id + '.htm'));
filestr.SaveToFile(g_path + 'update\update.ini');
filestr.Free;
Except
MessageBox(handle, '取得升级信息出错!', '错误提示', MB_OK + MB_ICONERROR);
exit;
End;
files.Clear;
Try
AppIni := TIniFile.Create(g_path + '\update\update.ini');
AppIni.ReadSections(files);
Finally
AppIni.Free;
End;
result := true;
End;
Procedure TForm_Update.FormCloseQuery(Sender: TObject;
Var CanClose: Boolean);
Begin
CanClose := true;
If HTTPFiles.Connected Then
Begin
If MessageBox(handle, '正在下载文件,要退出吗?', '信息提示', MB_YESNO + MB_ICONQUESTION) = ID_YES Then
CanClose := true
Else
CanClose := false;
End;
If btn_next.Caption = '完成升级' Then
Begin
If MessageBox(handle, '文件下载已经完成,但并没有更新文件,要退出吗?', '信息提示', MB_YESNO + MB_ICONQUESTION) = ID_YES Then
CanClose := true
Else
CanClose := false;
End;
End;
Procedure TForm_Update.Button1Click(Sender: TObject);
Begin
RzPageControl1.ActivePageIndex := 2;
End;
Procedure TForm_Update.Button2Click(Sender: TObject);
Begin
sj := false;
self.stop1 := true;
memo1.Lines.Add('已中断下载;' + #13#10);
// self.Close;
End;
Procedure TForm_Update.RzPageControl1Change(Sender: TObject);
Begin
If RzPageControl1.ActivePageIndex = 0 Then
Begin
btn_pre.Enabled := false;
btn_next.Caption := '下一步';
btn_next.Enabled := true;
End
Else
btn_pre.Enabled := true;
End;
Procedure TForm_Update.btn_preClick(Sender: TObject);
Begin
//button2.Click;
Try
HTTPFiles.Disconnect;
Except
End;
RzPageControl1.ActivePageIndex := 0;
btn_next.Caption := '下一步';
btn_next.Enabled := true;
End;
Procedure TForm_Update.btn_nextClick(Sender: TObject);
Var i : integer;
run_exe, host1, file1: String;
Flist : TListItem;
myblob : TStream;
fd : Tdatetime;
allget : boolean;
Begin
If btn_next.Caption = '完成升级' Then
Begin
btn_next.Enabled := false;
btn_next.Caption := '复制新文件..';
button2.Enabled := false;
For i := 0 To files.Count - 1 Do //复制文件更新
Begin
copyfile(pchar(g_path + files[i]), pchar(g_path + 'backup\' + files[i] + '.bak'), false);
End;
For i := 0 To files.Count - 1 Do //从update复制新文件
Begin
copyfile(pchar(g_path + 'update\' + files[i]), pchar(g_path + files[i]), false);
DeleteFile(pchar(g_path + 'update\' + files[i])); //删除update目录中的升级文件
End;
Try
AppIni := TIniFile.Create(g_path + 'chis.ini');
run_exe := AppIni.ReadString('chis', 'exe', '');
If run_exe <> '' Then
shellexecute(handle, 'open', pchar(run_exe), Nil, Nil, sw_show);
Finally
AppIni.Free;
End;
// application.Terminate;
exit;
End;
Gauge_process.MaxValue := 100;
Gauge_process.Progress := 0;
ListView_files.Items.Clear;
Flist := ListView_files.Items.Add;
Flist.Caption := '分析文件升级信息...';
Flist.StateIndex := 0;
Flist.ImageIndex := 0;
RzPageControl1.ActivePageIndex := 1;
If ExistNewFile Then //如果存在升级信息
Begin
ListView_files.Items.Clear;
Gauge_process.Progress := 0;
For i := 0 To files.Count - 1 Do
Begin
Flist := ListView_files.Items.Add; //把待升级文件信息写入列表
Flist.Caption := files[i];
Flist.StateIndex := -1;
Flist.ImageIndex := -1;
End;
//下载升级文件
btn_next.Enabled := false;
btn_next.Caption := '连接中!';
button2.Enabled := true;
Try
AppIni := TIniFile.Create(g_path + 'update\update.ini');
For i := 0 To files.Count - 1 Do
Begin
ListView_files.Items[i].StateIndex := 0;
ListView_files.Items[i].ImageIndex := 0;
listview_files.Items[i].SubItems.Add(appini.ReadString(files[i], 'datetime', ''));
host1 := Edt_url.Text + files[i];
file1 := g_path + 'update\' + files[i];
file1 := StringReplace(file1, '/', '\', [rfReplaceAll]);
memo1.Lines.Add('连接远程文件:' + host1 + #13#10);
If getfiledate(files[i], fd) Then
Begin
If fd < strtodatetime(Appini.ReadString(files[i], 'datetime', '')) Then
Begin
listview_files.Items[i].SubItems.Append('需要升级');
If Download(host1, file1) Then
Begin
allget := true;
ListView_files.Items[i].StateIndex := 1;
ListView_files.Items[i].ImageIndex := 1;
End
Else
Begin
allget := false;
ListView_files.Items[i].StateIndex := 2;
ListView_files.Items[i].ImageIndex := 2;
End;
End
Else
Begin
allget := true;
listview_files.Items[i].SubItems.Append('不需更新');
ListView_files.Items[i].StateIndex := 3;
ListView_files.Items[i].ImageIndex := 3;
memo1.Lines.Add(listview_files.Items[i].Caption + '文件不需要更新,跳过下载' + #13#10);
End;
End
Else
Begin
listview_files.Items[i].SubItems.Append('需要创建');
If Download(host1, file1) Then
Begin
allget := true;
ListView_files.Items[i].StateIndex := 1;
ListView_files.Items[i].ImageIndex := 1;
End
Else
Begin
allget := false;
ListView_files.Items[i].StateIndex := 2;
ListView_files.Items[i].ImageIndex := 2;
End;
End;
End;
Finally
button2.Enabled := false;
AppIni.Free;
HTTPfiles.Disconnect;
End;
btn_next.Enabled := true;
sj := sj Or allget;
If (RzPageControl1.ActivePageIndex = 1) And sj
Then
btn_next.Caption := '完成升级'
Else
btn_next.Caption := '继续下载';
End;
End;
Procedure TForm_Update.RzBitBtn1Click(Sender: TObject);
Var datastring, sqlstring: widestring;
i : integer;
myinifile : Tinifile;
strUser, strServer: String;
filename : String;
Begin
self.RzPageControl1.ActivePageIndex := 3;
filename := ExtractFilePath(Paramstr(0)) + 'mentorouser.ini';
myinifile := Tinifile.Create(filename);
strServer := myinifile.ReadString('messages', 'server', '(local)');
strUser := myinifile.ReadString('messages', 'dataname', '(local)');
Try
ADOConnection1.Connected := false;
datastring := 'Provider=SQLOLEDB.1;Password=mentoro;Persist Security Info=False;User ID=mentorologin;Initial Catalog=' + strUser + ';Data Source=' + strServer;
ADOConnection1.ConnectionString := datastring;
ADOConnection1.Connected := true;
ADOTable1.Active := FALSE;
ADOTable1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=SQLtext.mdb;Persist Security Info=True';
ADOTable1.TableName := 'SQLTEXT';
ADOTable1.Active := TRUE;
RzProgressBar1.TotalParts := ADOTable1.RecordCount;
While Not ADOTable1.Eof Do
Begin
ADOQuery1.ParamCheck := false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.add(ADOTable1.FieldByName('命令').asstring);
memo2.Lines.Add(ADOTable1.FieldByName('命令').asstring);
ADOQuery1.execsql;
ADOTable1.Next;
RzProgressBar1.PartsComplete := RzProgressBar1.PartsComplete + 1;
End;
MessageBox(Handle, '数据升级成功!请保证您的管理系统也是最新的!', '操作提醒', MB_ICONASTERISK);
Except
MessageBox(Handle, '数据升级失败!', '操作提醒', MB_ICONHAND);
End;
RzProgressBar1.TotalParts := 0;
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -