TacAutoUpgrader使用指南

更新时间:2023-08-05 22:35:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

TacAutoUpgrader使用指南

1 概述

1.1 缺点

仅支持HTTP方式升级。(不太适合客户端从网吧服务器上升级)

仅直接支持按文件大小比较来决定是否下载一个文件;或者干脆下载所有文件。不过可以通过事件OnFileStart来根据文件大小和/或最后修改时间来决定是否下载一个文件。 仅支持单一目标文件夹(因此不能升级程序目录的子目录中的文件,当然也有办法曲折实现)

1.2 优点

有详细的帮助文档

升级向导的图片可以定制:属性Wizard.Pic118x218

各对话框可以使用默认的或定制:属性ShowMessages(集合)

升级信息文件格式简单

1.3 其他

若有不能自动替换的文件,程序目录中将留下名为“原名”+“.utmp”格式的文件,如: scktsrvr.exe.utmp

txyfts.exe.utmp

因为它们对应的原文件也是一个可执行文件,该控件不能自动结束它们;不过,只需要在程序里结束一下即可:在事件OnDoOwnCloseAppMethod中结束这些程序;在事件OnAfterRestart中开始运行这些程序。

如果是有选择性地下载真正的升了级的文件,需要另行判断是否需要停止对应的程序。当然也可以简化处理:全部先停止,然后再全部启动。

在启动程序时,可能需要设置当前目录:

SetCurrentDir(ExtractFileDir(Application.ExeName));

1.4 相关信息:

1、 怎样根据文件名杀死对应的进程?

a) 干干净净地杀死进程

b) Windows 2000/XP两个杀死进程的命令Windows 2000/XP两个杀死进程的命令

其中以命令taskkill最为简单,例如:

taskkill /f /im txyfts.exe

2 升级信息文件 升级信息文件的格式:

#date=MM/DD/YYYY (标志版本的日期,当控件的VersionControl=byDate时生效) #version=any string (标志版本的字符串,当控件的VersionControl=byNumber时生效) #url1=http://www.77cn.com.cn/download/MyApp.exe (主文件的下载URL)

#url2=http://www.77cn.com.cn/download/MyApp.dll (以下是其他文件的下载URL) ...

#urlN=http://www.77cn.com.cn/download/ReleaseNotes.txt

#method=0 (由控件负责升级)

(向用户显示的消息放在一对花括号即"{}"中)

#message={消息的第一行

第二行 第三行}

升级信息文件放在升级服务器上,记下它的URL。

3 TacAutoUpgrader的使用

在程序主窗体放置一个TacAutoUpgrader,假设命名为au。为方便测试,暂定为用字符串作版本控制。于是设置VersionControl属性为byNumber。

设置属性InfoFileURL为前面记下的升级信息文件的URL,如

设置属性VersionNumber为当前版本串,如2.0.0.3。这是任意的,只要新旧值不同,控件就认为有新版了。

旧版的OnDoOwnCloseAppMethod事件处理器中要为下次升级作准备,例如结束一些进程,注意包括主程序本身。如:

procedure TMainForm.auDoOwnCloseAppMethod(Sender: TObject);

begin

WinExec('taskkill /f /im txyfts.exe', SW_SHOWNORMAL);

WinExec('taskkill /f /im scktsrvr.exe', SW_SHOWNORMAL);

Close;

Application.Terminate;

end;

新版的OnAfterRestart事件处理器中再启动这些进程。如:

procedure TMainForm.auAfterRestart(Sender: TObject);

begin

SetCurrentDir(ExtractFileDir(Application.ExeName));

WinExec('net start SocketServer', SW_SHOWNORMAL);

WinExec('txyfts.exe', SW_SHOWNORMAL);

end;

若要让控件自动检查升级,只需设置属性:AutoCheck := True。

若自行检查升级,也只需调用方法:CheckUpdate()。

4 静默升级

怎样实现有选择的静默升级呢?

首先,在升级服务器上放置一个标志文件,例如silent.txt,内容任意,也可以是0字节文件。 然后在程序中:

1、 在事件OnBeginUpgrade处理器中,检查参数Files中是否包含名为silent.txt的文件,若

包含,表示要作静默升级。

2、 若是静默升级,则所有对话框都不显示:

a) ShowMessages := [];

b) Wizard.Enabled := False;

3、 升级完毕,删除下载过来的silent.txt文件。

于是,最终的相关代码如下:

// 读到升级信息文件后的处理

procedure TMainForm.auBeginUpgrade(Sender: TObject;

const UpgradeMsg: String; UpgradeMethod: TacUpgradeMethod;

Files: TStringList; var CanUpgrade: Boolean);

var

i: Integer;

s: string;

bSilent: Boolean;

begin

CanUpgrade := Files.Count <> 0;

if not CanUpgrade then Exit;

for i := 0 to Files.Count - 1 do

begin

if Pos('silent.txt', Files[i]) > 0 then

begin

bSilent := True;

Break;

end;

end;

if bSilent then

begin

au.ShowMessages := []; // 静默方式,所有对话框都不显示

au.Wizard.Enabled := False;

Exit;

end;

// 非静默方式,询问用户是否升级

// CanUpgrade := MessageBox(Handle, PChar(UpgradeMsg), '是否升级?', MB_YESNO) = IDYES; // 注释掉 是想使用控件自己的询问对话框

end;

// 新版主程序第一次启动后的处理

procedure TMainForm.auAfterRestart(Sender: TObject);

var appDir, s: string;

begin

// 设置当前目录

appDir := ExtractFileDir(Application.ExeName);

SetCurrentDir(appDir);

// 删除静默升级的标志文件

s := appDir + '\silent.txt';

if FileExists(s) then

DeleteFile(s);

// 启动其他必需的进程

WinExec('net start SocketServer', SW_SHOWNORMAL);

WinExec(PChar(appDir + '\txyfts.exe'), SW_SHOWNORMAL);

end;

// 下一次升级时,在更新文件前需要关闭的进程

procedure TMainForm.auDoOwnCloseAppMethod(Sender: TObject);

begin

WinExec('taskkill /f /im txyfts.exe', SW_SHOWNORMAL);

WinExec('taskkill /f /im scktsrvr.exe', SW_SHOWNORMAL);

// 注意关闭本程序

Close;

Application.Terminate;

end;

本文来源:https://www.bwwdw.com/article/k9um.html

Top