53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
// 官方客户端升级后的补丁回写标记。wscript 字面量给重启脚本用。
|
|
import path from "node:path";
|
|
import { hostFs as fs } from "./extract-asar.js";
|
|
|
|
const MARKER_NAME = "dsh-purge-reapply-asar";
|
|
|
|
function harnessExeName(exe) {
|
|
const base = path.basename(String(exe || "")).toLowerCase();
|
|
return base === "deepseek harness.exe" || base === "deepseek-harness.exe";
|
|
}
|
|
|
|
export function upgradeMarkerPath(exe) {
|
|
if (!harnessExeName(exe)) return "";
|
|
return path.join(path.dirname(exe), "resources", MARKER_NAME);
|
|
}
|
|
|
|
export function upgradeMarkerExists(exe) {
|
|
const marker = upgradeMarkerPath(exe);
|
|
return Boolean(marker && fs.existsSync(marker));
|
|
}
|
|
|
|
export function clearUpgradeMarker(exe) {
|
|
const marker = upgradeMarkerPath(exe);
|
|
if (!marker) return;
|
|
try { fs.rmSync(marker, { force: true }); } catch { /* 下次启动再试 */ }
|
|
}
|
|
|
|
export function clearStaleExtractedApps(exe) {
|
|
if (!harnessExeName(exe)) return;
|
|
const resources = path.join(path.dirname(exe), "resources");
|
|
let names = [];
|
|
try { names = fs.readdirSync(resources); } catch { return; }
|
|
for (const name of names) {
|
|
if (!name.startsWith("app.dshpurge-prev")) continue;
|
|
try { fs.rmSync(path.join(resources, name), { recursive: true, force: true }); } catch { /* 旧目录删不掉不影响新版本 */ }
|
|
}
|
|
}
|
|
|
|
/** Windows Script Host 无 BOM 时按系统 ANSI 读文件。中文路径写成 \uXXXX,整份脚本保持 ASCII。 */
|
|
export function wshLiteral(value) {
|
|
return JSON.stringify(String(value ?? "")).replace(/[\u007f-\uffff]/g, (ch) => {
|
|
return "\\u" + ch.charCodeAt(0).toString(16).padStart(4, "0");
|
|
});
|
|
}
|
|
|
|
export function isWshAscii(source) {
|
|
const text = String(source || "");
|
|
for (let i = 0; i < text.length; i += 1) {
|
|
if (text.charCodeAt(i) > 0x7f) return false;
|
|
}
|
|
return true;
|
|
}
|