Skip to content

Latest commit

 

History

History
95 lines (74 loc) · 3.17 KB

软件智能升级说明.md

File metadata and controls

95 lines (74 loc) · 3.17 KB

软件智能升级说明

此智能软件升级是为绿色软件提供升级功能,网络技术基于remobjects,源码所在目录:base\auto update。因为可以单独拿出来使用,在此重点说明。

UpdateServer 服务器功能说明:

  • 提供任意软件的下载
  • 在AppStore目录下用appid建一个目录,然后把软件相关文件和目录放置该目录下
  • 更新相应appid目录下任意文件和目录,客户端即可下载发生更新的文件和目录
  • 升级服务基于不带身份认证的文件服务,文件服务源码目录:base\file manage
  • 文件服务也有服务器和客户端示例

UpdateClient 客户端功能说明:

  • 从指定更新服务器下载指定appid对应的最新文件到指定目录(所有文件先下载到临时目录,全部下载完成后才移动到指定目录)
  • 下载完成后执行UpdateScript.bat脚本文件(如果文件存在)
  • 更新完成后重新启动软件(如果命令行已指定appexe参数),并关闭自身
  • 智能升级客户端(base/auto update/release/UpdateClient)一般与软件目录同级放置,多个软件可共享一个升级客户端

使用bat脚本集成,第3方软件不需要做任何修改,示例:

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所在目录

在Delphi程序中集成,示例:

下面示例代码片断来自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);