Skip to content

获取最近更新状态 - SoftUpdateGetLastStatus

函数简介

读取安装根目录下最近一次自更新状态(含 Updater 替换/安装阶段)。

判定规则(重要)

情况Code说明
无状态/无日志(含更新成功后已清理)1视为成功,Messagesuccess
存在成功或进行中状态1MessagesuccessPhase / Detail / Percent 为过程信息
存在失败状态或失败日志0Message / Detail 为失败摘要

更新成功后 Updater 会清理 .ola_update\logs\,因此成功后再次调用本接口通常得到「无日志 → Code=1」。失败时日志会保留,便于排查。

成功 / 无日志示例:

json
{
  "Code": 1,
  "Message": "success",
  "Phase": "",
  "StatusCode": 1,
  "Detail": "",
  "Version": "",
  "Package": "",
  "PackageType": "",
  "Percent": 0,
  "LogFile": "",
  "UpdatedAt": ""
}

失败示例:

json
{
  "Code": 0,
  "Message": "extract failed: cannot open archive",
  "Phase": "failed",
  "StatusCode": 0,
  "Detail": "extract failed: cannot open archive",
  "Version": "1.2.0",
  "Package": "C:\\App\\.ola_update\\cache\\1.2.0\\app.zip",
  "PackageType": "zip",
  "Percent": 30,
  "LogFile": "update_20260723_185000.log",
  "UpdatedAt": "2026-07-23T18:50:00"
}

进行中示例(宿主退出前/Updater 执行中尚有状态文件时):

json
{
  "Code": 1,
  "Message": "success",
  "Phase": "commit",
  "StatusCode": 1,
  "Detail": "commit completed",
  "Version": "1.2.0",
  "Package": "C:\\App\\.ola_update\\cache\\1.2.0\\app.zip",
  "PackageType": "zip",
  "Percent": 90,
  "LogFile": "update_20260723_185000.log",
  "UpdatedAt": "2026-07-23T18:50:00"
}
字段名类型说明
Code整数接口结果1 成功或无失败日志;0 最近一次更新失败。
Message字符串成功时为 success;失败时为失败摘要。
Phase字符串更新阶段(如 wait / extract / commit / install / done / failed / rollback);无日志时为空。
StatusCode整数更新结果码;成功倾向为 1;失败为 0
Detail字符串更新详情;失败时与失败摘要一致。
Version字符串目标版本。
Package字符串安装包路径。
PackageType字符串ziprarexe
Percent整数Updater 侧百分比(0–100)。
LogFile字符串会话日志文件名(失败时通常仍存在)。
UpdatedAt字符串状态更新时间。

接口名称

SoftUpdateGetLastStatus

DLL调用

long SoftUpdateGetLastStatus(string installRoot);

参数说明

参数名类型说明
installRoot字符串安装根目录(与 SoftUpdateStart 传入的一致)。

示例

SDK 调用

cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
OlaSoftUpdateLastStatusReturn status = ola.SoftUpdateGetLastStatus("C:\\App");
if (status.Code == 1) {
    // 成功或无失败日志(含更新成功后已清理)
} else {
    // 失败:看 status.Message / status.Detail / status.Phase
}
csharp
using OLAPlug;

var ola = new OLAPlugServer();
OlaSoftUpdateLastStatusReturn status = ola.SoftUpdateGetLastStatus(@"C:\App");
// status.Code == 1 表示成功或无失败日志;== 0 表示失败
python
from OLAPlugServer import OLAPlugServer

ola = OLAPlugServer()
json_result = ola.SoftUpdateGetLastStatus(r"C:\App")
# Python SDK 返回 JSON 字符串,需自行解析
java
import com.olaplug.OLAPlugServer;
import com.olaplug.model.OlaSoftUpdateLastStatusReturn;

OLAPlugServer ola = new OLAPlugServer();
OlaSoftUpdateLastStatusReturn status = ola.SoftUpdateGetLastStatus("C:\\App");
// status.Code == 1 表示成功或无失败日志
go
import "github.com/ola/olaplug/olaplug"

ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
status := ola.SoftUpdateGetLastStatus(`C:\App`)
// status.Code == 1 表示成功或无失败日志
rust
use olaplug::OLAPlugServer;

let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
let status = ola.soft_update_get_last_status(r"C:\App");
// status.code == 1 表示成功或无失败日志
cpp
var ola = com("OlaPlug.OlaSoft")
var status = ola.SoftUpdateGetLastStatus("C:\App")
vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
Set status = ola.SoftUpdateGetLastStatus("C:\App")
text
.局部变量 ola, OLAPlug
.局部变量 status, OlaSoftUpdateLastStatusReturn
ola.创建 ()
status = ola.SoftUpdateGetLastStatus(“C:\App”)
aardio
import OLAPlugServer;
var ola = OLAPlugServer();
var json = ola.SoftUpdateGetLastStatus("C:\\App");
// Aardio SDK 返回 JSON 字符串,需自行解析
text
变量 ola <类型 = OLAPlugServer>
变量 status <类型 = OlaSoftUpdateLastStatusReturn>
ola = 新建 OLAPlugServer
status = ola.SoftUpdateGetLastStatus("C:\App")
cpp
#include "OLAPlugServer.h"

OLAPlugServer ola;
OlaSoftUpdateLastStatusReturn status = ola.SoftUpdateGetLastStatus("C:\\App");
// status.Code == 1 表示成功或无失败日志

原生 DLL 调用

cpp
long ptr = SoftUpdateGetLastStatus("C:\\App");
if (ptr != 0) {
    char buffer[2048] = {0};
    GetStringFromPtr(ptr, buffer, sizeof(buffer));
    FreeStringPtr(ptr);
}
csharp
using System.Runtime.InteropServices;
using System.Text;

[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringFromPtr(long ptr, StringBuilder lpString, int size);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int FreeStringPtr(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int GetStringSize(long ptr);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long SoftUpdateGetLastStatus(string installRoot);

long ptr = SoftUpdateGetLastStatus(@"C:\App");
if (ptr != 0) {
    StringBuilder sb = new StringBuilder(GetStringSize(ptr) + 1);
    GetStringFromPtr(ptr, sb, sb.Capacity);
    FreeStringPtr(ptr);
    string result = sb.ToString();
}
python
from ctypes import CDLL, c_int64, create_string_buffer

ola = CDLL("OLAPlug_x64.dll")
ptr = ola.SoftUpdateGetLastStatus(b"C:\\App")
if ptr:
    buf = create_string_buffer(2048)
    ola.GetStringFromPtr(ptr, buf, 2048)
    ola.FreeStringPtr(ptr)
    result = buf.value.decode("utf-8")

返回值

调用方式返回值说明
SDKOlaSoftUpdateLastStatusReturn结构化返回对象;Code == 1 成功/无失败日志,Code == 0 失败
原生 DLL非 0成功返回 JSON 字符串指针
原生 DLL0调用失败

注意事项

项目说明
释放内存原生返回的字符串指针需调用 FreeStringPtr 释放。
与 Progress 分工下载阶段用 SoftUpdateGetProgress;宿主退出后看本接口。
失败摘要也可直接用 SoftUpdateGetLastError
中断恢复SoftUpdateTryRecover 返回结构与本接口相同。
模块总览 / Demo软件自更新模块总览