fix: make silent updater produce logs reliably and release 0.1.26

This commit is contained in:
2026-02-20 22:55:20 +08:00
parent c8f63d6fc9
commit b179cae14e
7 changed files with 47 additions and 12 deletions

View File

@@ -112,7 +112,7 @@ const DOWNLOAD_SIGNED_URL_EXPIRES_SECONDS = Math.max(
10, 10,
Math.min(3600, Number(process.env.DOWNLOAD_SIGNED_URL_EXPIRES_SECONDS || 30)) Math.min(3600, Number(process.env.DOWNLOAD_SIGNED_URL_EXPIRES_SECONDS || 30))
); );
const DEFAULT_DESKTOP_VERSION = process.env.DESKTOP_LATEST_VERSION || '0.1.25'; const DEFAULT_DESKTOP_VERSION = process.env.DESKTOP_LATEST_VERSION || '0.1.26';
const DEFAULT_DESKTOP_INSTALLER_URL = process.env.DESKTOP_INSTALLER_URL || ''; const DEFAULT_DESKTOP_INSTALLER_URL = process.env.DESKTOP_INSTALLER_URL || '';
const DEFAULT_DESKTOP_INSTALLER_SHA256 = String(process.env.DESKTOP_INSTALLER_SHA256 || '').trim().toLowerCase(); const DEFAULT_DESKTOP_INSTALLER_SHA256 = String(process.env.DESKTOP_INSTALLER_SHA256 || '').trim().toLowerCase();
const DEFAULT_DESKTOP_INSTALLER_SIZE = Math.max(0, Number(process.env.DESKTOP_INSTALLER_SIZE || 0)); const DEFAULT_DESKTOP_INSTALLER_SIZE = Math.max(0, Number(process.env.DESKTOP_INSTALLER_SIZE || 0));

View File

@@ -1,7 +1,7 @@
{ {
"name": "desktop-client", "name": "desktop-client",
"private": true, "private": true,
"version": "0.1.25", "version": "0.1.26",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -693,7 +693,7 @@ dependencies = [
[[package]] [[package]]
name = "desktop-client" name = "desktop-client"
version = "0.1.25" version = "0.1.26"
dependencies = [ dependencies = [
"reqwest 0.12.28", "reqwest 0.12.28",
"rusqlite", "rusqlite",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "desktop-client" name = "desktop-client"
version = "0.1.25" version = "0.1.26"
description = "A Tauri App" description = "A Tauri App"
authors = ["you"] authors = ["you"]
edition = "2021" edition = "2021"

View File

@@ -1353,6 +1353,11 @@ fn api_silent_install_and_restart(installer_path: String) -> Result<BridgeRespon
return Err("安装包路径无效".to_string()); return Err("安装包路径无效".to_string());
} }
#[cfg(target_os = "windows")]
let windows_log_file_path: String;
#[cfg(target_os = "windows")]
let windows_script_file_path: String;
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
{ {
let current_exe = env::current_exe().map_err(|err| format!("获取当前程序路径失败: {}", err))?; let current_exe = env::current_exe().map_err(|err| format!("获取当前程序路径失败: {}", err))?;
@@ -1365,10 +1370,19 @@ fn api_silent_install_and_restart(installer_path: String) -> Result<BridgeRespon
.unwrap_or_default(); .unwrap_or_default();
let script_path = temp_dir.join(format!("silent-update-{}.cmd", script_stamp)); let script_path = temp_dir.join(format!("silent-update-{}.cmd", script_stamp));
let log_path = temp_dir.join(format!("silent-update-{}.log", script_stamp)); let log_path = temp_dir.join(format!("silent-update-{}.log", script_stamp));
windows_log_file_path = log_path.to_string_lossy().to_string();
windows_script_file_path = script_path.to_string_lossy().to_string();
let installer_text = installer.to_string_lossy().replace('"', "\"\""); let installer_text = installer.to_string_lossy().replace('"', "\"\"");
let app_text = current_exe.to_string_lossy().replace('"', "\"\""); let app_text = current_exe.to_string_lossy().replace('"', "\"\"");
let log_text = log_path.to_string_lossy().replace('"', "\"\""); let log_text = log_path.to_string_lossy().replace('"', "\"\"");
let bootstrap_content = format!(
"[bootstrap] silent updater prepared\r\npid={}\r\ninstaller={}\r\nscript={}\r\n",
current_pid,
installer.to_string_lossy(),
script_path.to_string_lossy()
);
fs::write(&log_path, bootstrap_content).map_err(|err| format!("写入更新日志失败: {}", err))?;
let script_content = format!( let script_content = format!(
"@echo off\r\n\ "@echo off\r\n\
setlocal enableextensions\r\n\ setlocal enableextensions\r\n\
@@ -1377,7 +1391,10 @@ set \"APP_EXE={app_exe}\"\r\n\
set \"APP_PID={app_pid}\"\r\n\ set \"APP_PID={app_pid}\"\r\n\
set \"LOG_FILE={log_file}\"\r\n\ set \"LOG_FILE={log_file}\"\r\n\
echo [%%date%% %%time%%] update script started > \"%LOG_FILE%\"\r\n\ echo [%%date%% %%time%%] update script started > \"%LOG_FILE%\"\r\n\
if not exist \"%INSTALLER%\" exit /b 1\r\n\ if not exist \"%INSTALLER%\" (\r\n\
echo [%%date%% %%time%%] installer not found: %INSTALLER% >> \"%LOG_FILE%\"\r\n\
exit /b 2\r\n\
)\r\n\
timeout /t 1 /nobreak >nul\r\n\ timeout /t 1 /nobreak >nul\r\n\
taskkill /PID %APP_PID% /F >nul 2>nul\r\n\ taskkill /PID %APP_PID% /F >nul 2>nul\r\n\
timeout /t 1 /nobreak >nul\r\n\ timeout /t 1 /nobreak >nul\r\n\
@@ -1394,17 +1411,27 @@ del \"%~f0\" >nul 2>nul\r\n",
log_file = log_text log_file = log_text
); );
fs::write(&script_path, script_content).map_err(|err| format!("写入更新脚本失败: {}", err))?; fs::write(&script_path, script_content).map_err(|err| format!("写入更新脚本失败: {}", err))?;
let script_arg = format!("\"{}\"", script_path.to_string_lossy());
let mut updater_cmd = Command::new("cmd"); let mut updater_cmd = Command::new("cmd");
updater_cmd let spawn_result = updater_cmd
.arg("/D") .arg("/D")
.arg("/C") .arg("/C")
.arg(&script_arg) .arg("call")
.arg(&script_path)
.current_dir(&temp_dir) .current_dir(&temp_dir)
.creation_flags(CREATE_NO_WINDOW) .creation_flags(CREATE_NO_WINDOW)
.spawn() .spawn();
.map_err(|err| format!("启动静默更新流程失败: {}", err))?; if let Err(err) = spawn_result {
let _ = fs::OpenOptions::new()
.create(true)
.append(true)
.open(&log_path)
.and_then(|mut file| {
writeln!(file, "[bootstrap] failed to spawn updater cmd: {}", err)?;
Ok(())
});
return Err(format!("启动静默更新流程失败: {}", err));
}
let mut cleanup_entries: Vec<PathBuf> = fs::read_dir(&temp_dir) let mut cleanup_entries: Vec<PathBuf> = fs::read_dir(&temp_dir)
.ok() .ok()
@@ -1459,6 +1486,14 @@ del \"%~f0\" >nul 2>nul\r\n",
.to_string(), .to_string(),
), ),
); );
data.insert(
"logFilePath".to_string(),
Value::String(windows_log_file_path),
);
data.insert(
"scriptPath".to_string(),
Value::String(windows_script_file_path),
);
} }
Ok(BridgeResponse { Ok(BridgeResponse {

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "玩玩云", "productName": "玩玩云",
"version": "0.1.25", "version": "0.1.26",
"identifier": "cn.workyai.wanwancloud.desktop", "identifier": "cn.workyai.wanwancloud.desktop",
"build": { "build": {
"beforeDevCommand": "npm run dev", "beforeDevCommand": "npm run dev",

View File

@@ -153,7 +153,7 @@ const syncState = reactive({
nextRunAt: "", nextRunAt: "",
}); });
const updateState = reactive({ const updateState = reactive({
currentVersion: "0.1.25", currentVersion: "0.1.26",
latestVersion: "", latestVersion: "",
available: false, available: false,
mandatory: false, mandatory: false,