主题
获取最近更新状态 - SoftUpdateGetLastStatus
函数简介
读取安装根目录下最近一次自更新状态(含 Updater 替换/安装阶段)。
判定规则(重要):
| 情况 | Code | 说明 |
|---|---|---|
| 无状态/无日志(含更新成功后已清理) | 1 | 视为成功,Message 为 success |
| 存在成功或进行中状态 | 1 | Message 为 success;Phase / Detail / Percent 为过程信息 |
| 存在失败状态或失败日志 | 0 | Message / 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 | 字符串 | zip、rar 或 exe。 |
| Percent | 整数 | Updater 侧百分比(0–100)。 |
| LogFile | 字符串 | 会话日志文件名(失败时通常仍存在)。 |
| UpdatedAt | 字符串 | 状态更新时间。 |
接口名称
SoftUpdateGetLastStatusDLL调用
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")返回值
| 调用方式 | 返回值 | 说明 |
|---|---|---|
| SDK | OlaSoftUpdateLastStatusReturn | 结构化返回对象;Code == 1 成功/无失败日志,Code == 0 失败 |
| 原生 DLL | 非 0 | 成功返回 JSON 字符串指针 |
| 原生 DLL | 0 | 调用失败 |
注意事项
| 项目 | 说明 |
|---|---|
| 释放内存 | 原生返回的字符串指针需调用 FreeStringPtr 释放。 |
| 与 Progress 分工 | 下载阶段用 SoftUpdateGetProgress;宿主退出后看本接口。 |
| 失败摘要 | 也可直接用 SoftUpdateGetLastError。 |
| 中断恢复 | SoftUpdateTryRecover 返回结构与本接口相同。 |
| 模块总览 / Demo | 见 软件自更新模块总览。 |
