此智能软件升级是为绿色软件提供升级功能,网络技术基于remobjects,源码所在目录:base\auto update。因为可以单独拿出来使用,在此重点说明。
- 提供任意软件的下载
- 在AppStore目录下用appid建一个目录,然后把软件相关文件和目录放置该目录下
- 更新相应appid目录下任意文件和目录,客户端即可下载发生更新的文件和目录
- 升级服务基于不带身份认证的文件服务,文件服务源码目录:base\file manage
- 文件服务也有服务器和客户端示例
- 从指定更新服务器下载指定appid对应的最新文件到指定目录(所有文件先下载到临时目录,全部下载完成后才移动到指定目录)
- 下载完成后执行UpdateScript.bat脚本文件(如果文件存在)
- 更新完成后重新启动软件(如果命令行已指定appexe参数),并关闭自身
- 智能升级客户端(base/auto update/release/UpdateClient)一般与软件目录同级放置,多个软件可共享一个升级客户端
UpdateClient.exe -AppID his -server 127.0.0.1:9800/bin -all -apppath e:\test -appexe e:\test\bin\client.exe
UpdateClient命令行参数
参数 | 解释 |
---|---|
AppID | 要更新的appid |
server | 更新服务器地址 |
all | 不管文件是否发生改变都重新下载 |
apppath | app所在目录 |
下面示例代码片断来自App_LoginForm.pas,
升级客户端目录base/auto update/release/UpdateClient放到软件同级目录中
function Function_UpdateApp(const AParam: array of Variant): Variant;
const
sFileName = '%s\UpdateClient\bin\UpdateClient.exe ';
sParam = '-AppID "%s" -AppPath "%s" -AppExe "%s"';
var
UpdateClient: string; // 更新客户端
CloseWindow: Boolean;
AppID: string;
AppPath: string;
AppExe: string;
ShellParam: string;
begin
UpdateClient := ExtractFileDir(ExcludeTrailingBackslash(AppCore.AppPath));
UpdateClient := Format(sFileName, [UpdateClient]);
if Length(AParam) = 0 then
begin
// 更新自身
CloseWindow := True;
AppID := AppCore.ID;
AppPath := AppCore.AppPath;
AppExe := AppCore.BinPath + AppCore.ExeName;
end
else
begin
CloseWindow := AParam[0];
AppID := AParam[1];
AppPath := AParam[2];
AppExe := AParam[3];
end;
Check(not FileExists(UpdateClient), '未找到更新客户端.');
// if CloseWindow then
// if not ShowYesNo('软件将关闭,确定升级吗?') then
// Exit;
if CloseWindow and (Screen.ActiveForm <> nil) then
Screen.ActiveForm.Close;
// 文件和参数不能合在一起,否则太长系统不执行
ShellParam := Format(sParam, [AppID, AppPath, AppExe]);
ShellExecute(0, nil, PChar(UpdateClient), PChar(ShellParam), nil, 0);
end;
procedure TLoginForm.UpdateButtonClick(Sender: TObject);
begin
AppCore.Functions.Execute(iFunctionID_UpdateApp, []);
end;
initialization
AppCore.Functions.Register(iFunctionID_UpdateApp, Function_UpdateApp);