Files
dream_pep 3653e26a09 feat: 发布 v1.2.0 版本,新增多项核心功能
- 引入 electron-updater 实现自动更新功能
- 新增 Java 环境扫描与校验的 IPC 处理逻辑
- 实现离线账号登录功能
- 新增配置变更跨进程广播机制
- 重构游戏启动逻辑,使用主进程内存配置作为唯一权威来源
- 新增界面显示与语言设置的配置页面
- 添加 Windows 平台自动发布 CI 流水线
- 迁移旧版配置/认证文件到用户数据目录
- 修复崩溃日志路径、表单控件等多项 bug
- 重构设置页组件系统统一界面样式
2026-08-28 02:08:12 +08:00

63 lines
2.0 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import electron from 'electron';
import * as fs from 'fs';
import * as path from 'path';
import { scanLocalJava, resolveJava } from '@xmcl/installer';
const { ipcMain } = electron;
// 常见 Java 安装目录(Windows),按一层子目录枚举 bin/java.exe
function scanCommonJavaDirs(): string[] {
const exe = process.platform === 'win32' ? 'java.exe' : 'java';
const roots = [
'C:\\Program Files\\Java',
'C:\\Program Files (x86)\\Java',
'C:\\Program Files\\Eclipse Adoptium',
'C:\\Program Files\\Microsoft',
'C:\\Program Files\\Zulu',
'C:\\Program Files\\Amazon Corretto',
];
const out: string[] = [];
for (const root of roots) {
try {
const entries = fs.readdirSync(root);
for (const e of entries) {
out.push(path.join(root, e, 'bin', exe));
}
} catch {
// 目录不存在则跳过
}
out.push(path.join(root, 'bin', exe));
}
return out;
}
export function registerJavaHandlers() {
// 扫描系统已安装的 JavaJAVA_HOME / PATH / 常见安装目录)
ipcMain.handle('java:scan', async () => {
try {
const candidates = scanCommonJavaDirs();
const list = await scanLocalJava(candidates);
// 按路径去重(同一安装可能被多个来源发现)
const seen = new Set<string>();
const javaList = list.filter((j) => {
if (seen.has(j.path)) return false;
seen.add(j.path);
return true;
});
return { success: true, data: { javaList }, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
// 校验指定路径是否为可用的 Java 可执行文件
ipcMain.handle('java:resolve', async (_event, payload: { path: string }) => {
try {
const java = await resolveJava(payload.path);
return { success: true, data: { java: java ?? null }, error: null };
} catch (e: unknown) {
return { success: false, data: null, error: String(e) };
}
});
}