From f72e4b7a6fccae163f9218e1bf83605566fec6e9 Mon Sep 17 00:00:00 2001 From: ethanfly Date: Fri, 26 Dec 2025 05:26:43 +0800 Subject: [PATCH] Enhance icon handling in Electron app by adding support for ICO format, update package.json for build resources, and refactor auto-launch settings to use Windows Task Scheduler for improved functionality. --- build/icon.ico | Bin 0 -> 20698 bytes build/icon.png | Bin 0 -> 33928 bytes electron/main.ts | 147 ++++++++++++++++-------- electron/services/ConfigStore.ts | 187 ++++++++++++++++--------------- package.json | 5 +- public/icon.ico | Bin 0 -> 20698 bytes public/icon.png | Bin 8904 -> 33928 bytes src/views/Settings.vue | 29 +---- 8 files changed, 197 insertions(+), 171 deletions(-) create mode 100644 build/icon.ico create mode 100644 build/icon.png create mode 100644 public/icon.ico diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0a1b73f940022093bd0d904f9b658d7c06959a32 GIT binary patch literal 20698 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 literal 0 HcmV?d00001 diff --git a/electron/main.ts b/electron/main.ts index 5e4da29..8259465 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -17,32 +17,42 @@ import { ServiceManager } from "./services/ServiceManager"; import { HostsManager } from "./services/HostsManager"; import { ConfigStore } from "./services/ConfigStore"; -// 获取托盘图标路径 (使用 PNG) -function getTrayIconPath(): string { +// 获取图标路径 +function getIconPath(filename: string): string { const { existsSync } = require("fs"); - const paths = [ - join(__dirname, "../public/icon.png"), - join(__dirname, "../dist/icon.png"), + + // 打包后的路径 + if (app.isPackaged) { + const paths = [ + join(process.resourcesPath, "public", filename), + join(process.resourcesPath, filename), + join(__dirname, "../public", filename), + ]; + for (const p of paths) { + if (existsSync(p)) return p; + } + } + + // 开发环境路径 + const devPaths = [ + join(__dirname, "../public", filename), + join(__dirname, "../dist", filename), ]; - for (const p of paths) { + for (const p of devPaths) { if (existsSync(p)) return p; } - return join(__dirname, "../public/icon.svg"); + + return join(__dirname, "../public/icon.ico"); } -// 获取窗口图标路径 (Windows 需要 PNG/ICO) +// 获取托盘图标路径 +function getTrayIconPath(): string { + return getIconPath("icon.ico"); +} + +// 获取窗口图标路径 function getWindowIconPath(): string { - const { existsSync } = require("fs"); - const paths = [ - join(__dirname, "../public/icon.png"), - join(__dirname, "../dist/icon.png"), - join(__dirname, "../public/icon.ico"), - join(__dirname, "../dist/icon.ico"), - ]; - for (const p of paths) { - if (existsSync(p)) return p; - } - return join(__dirname, "../public/icon.svg"); + return getIconPath("icon.ico"); } // 创建托盘图标 @@ -229,12 +239,6 @@ app.whenReady().then(async () => { createTray(); createWindow(); - // 检查是否启用开机自启且自动启动服务 - const autoStartServices = configStore.get("autoStartServicesOnBoot"); - if (autoStartServices) { - await serviceManager.startAll(); - } - app.on("activate", () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); @@ -477,23 +481,79 @@ ipcMain.handle("config:setBasePath", (_, path: string) => ); // ==================== 应用设置 ==================== -// 设置开机自启 +// 设置开机自启(以管理员模式,使用任务计划程序) ipcMain.handle("app:setAutoLaunch", async (_, enabled: boolean) => { - app.setLoginItemSettings({ - openAtLogin: enabled, - openAsHidden: true, // 静默启动 - args: ["--hidden"], - }); - configStore.set("autoLaunch", enabled); - return { - success: true, - message: enabled ? "已启用开机自启" : "已禁用开机自启", - }; + const { execSync } = require("child_process"); + const exePath = app.getPath("exe"); + const taskName = "PHPerDevManager"; + + // 开发模式下不支持 + if (!app.isPackaged) { + return { + success: false, + message: "开发模式下不支持开机自启,请打包后使用", + }; + } + + try { + if (enabled) { + // 先删除可能存在的旧任务 + try { + execSync(`schtasks /delete /tn "${taskName}" /f`, { + encoding: "buffer", + windowsHide: true, + }); + } catch (e) { + // 忽略删除失败(可能任务不存在) + } + + // 创建任务计划程序任务,以最高权限运行 + const command = `schtasks /create /tn "${taskName}" /tr "\\"${exePath}\\"" /sc onlogon /rl highest /f`; + execSync(command, { encoding: "buffer", windowsHide: true }); + + configStore.set("autoLaunch", true); + return { success: true, message: "已启用开机自启(管理员模式)" }; + } else { + // 删除任务计划程序任务 + try { + execSync(`schtasks /delete /tn "${taskName}" /f`, { + encoding: "buffer", + windowsHide: true, + }); + } catch (e) { + // 忽略删除失败 + } + configStore.set("autoLaunch", false); + return { success: true, message: "已禁用开机自启" }; + } + } catch (error: any) { + console.error("任务计划操作失败:", error); + return { + success: false, + message: "操作失败,请确保应用以管理员身份运行", + }; + } }); // 获取开机自启状态 -ipcMain.handle("app:getAutoLaunch", () => { - return app.getLoginItemSettings().openAtLogin; +ipcMain.handle("app:getAutoLaunch", async () => { + const { execSync } = require("child_process"); + const taskName = "PHPerDevManager"; + + // 开发模式下返回 false + if (!app.isPackaged) { + return false; + } + + try { + execSync(`schtasks /query /tn "${taskName}"`, { + encoding: "buffer", + windowsHide: true, + }); + return true; + } catch (e) { + return false; + } }); // 设置启动时最小化到托盘 @@ -507,17 +567,6 @@ ipcMain.handle("app:getStartMinimized", () => { return configStore.get("startMinimized") || false; }); -// 设置开机自启时自动启动服务 -ipcMain.handle("app:setAutoStartServices", (_, enabled: boolean) => { - configStore.set("autoStartServicesOnBoot", enabled); - return { success: true }; -}); - -// 获取自动启动服务状态 -ipcMain.handle("app:getAutoStartServices", () => { - return configStore.get("autoStartServicesOnBoot") || false; -}); - // 真正退出应用 ipcMain.handle("app:quit", () => { isQuitting = true; diff --git a/electron/services/ConfigStore.ts b/electron/services/ConfigStore.ts index a83fe90..f134579 100644 --- a/electron/services/ConfigStore.ts +++ b/electron/services/ConfigStore.ts @@ -1,221 +1,222 @@ -import Store from 'electron-store' -import { join, dirname } from 'path' -import { existsSync, mkdirSync } from 'fs' -import { app } from 'electron' +import Store from "electron-store"; +import { join, dirname } from "path"; +import { existsSync, mkdirSync } from "fs"; +import { app } from "electron"; interface ConfigSchema { - basePath: string - phpVersions: string[] - mysqlVersions: string[] - nginxVersions: string[] - redisVersions: string[] - activePhpVersion: string + basePath: string; + phpVersions: string[]; + mysqlVersions: string[]; + nginxVersions: string[]; + redisVersions: string[]; + activePhpVersion: string; autoStart: { - nginx: boolean - mysql: boolean - redis: boolean - } - sites: SiteConfig[] + nginx: boolean; + mysql: boolean; + redis: boolean; + }; + sites: SiteConfig[]; } export interface SiteConfig { - name: string - domain: string - rootPath: string - phpVersion: string - isLaravel: boolean - ssl: boolean - enabled: boolean + name: string; + domain: string; + rootPath: string; + phpVersion: string; + isLaravel: boolean; + ssl: boolean; + enabled: boolean; } // 获取应用安装目录下的 data 路径 function getDefaultBasePath(): string { if (app.isPackaged) { // 生产环境:使用可执行文件所在目录下的 data 文件夹 - const exePath = app.getPath('exe') - const appDir = dirname(exePath) - return join(appDir, 'data') + const exePath = app.getPath("exe"); + const appDir = dirname(exePath); + return join(appDir, "data"); } else { // 开发环境:使用项目根目录下的 data 文件夹 - return join(process.cwd(), 'data') + return join(process.cwd(), "data"); } } export class ConfigStore { - private store: Store - private basePath: string + private store: Store; + private basePath: string; constructor() { this.store = new Store({ defaults: { - basePath: getDefaultBasePath(), + basePath: "", phpVersions: [], mysqlVersions: [], nginxVersions: [], redisVersions: [], - activePhpVersion: '', + activePhpVersion: "", autoStart: { nginx: false, mysql: false, - redis: false + redis: false, }, - sites: [] - } - }) + sites: [], + }, + }); - this.basePath = this.store.get('basePath') - this.ensureDirectories() + // 直接使用应用安装目录下的 data 路径 + this.basePath = getDefaultBasePath(); + this.store.set("basePath", this.basePath); + this.ensureDirectories(); } private ensureDirectories(): void { const dirs = [ this.basePath, - join(this.basePath, 'php'), - join(this.basePath, 'mysql'), - join(this.basePath, 'nginx'), - join(this.basePath, 'nginx', 'sites-available'), - join(this.basePath, 'nginx', 'sites-enabled'), - join(this.basePath, 'nginx', 'ssl'), - join(this.basePath, 'redis'), - join(this.basePath, 'logs'), - join(this.basePath, 'temp'), - join(this.basePath, 'www') - ] + join(this.basePath, "php"), + join(this.basePath, "mysql"), + join(this.basePath, "nginx"), + join(this.basePath, "nginx", "sites-available"), + join(this.basePath, "nginx", "sites-enabled"), + join(this.basePath, "nginx", "ssl"), + join(this.basePath, "redis"), + join(this.basePath, "logs"), + join(this.basePath, "temp"), + join(this.basePath, "www"), + ]; for (const dir of dirs) { if (!existsSync(dir)) { - mkdirSync(dir, { recursive: true }) + mkdirSync(dir, { recursive: true }); } } } get(key: K): ConfigSchema[K] { - return this.store.get(key) + return this.store.get(key); } set(key: K, value: ConfigSchema[K]): void { - this.store.set(key, value) + this.store.set(key, value); } getBasePath(): string { - return this.basePath + return this.basePath; } setBasePath(path: string): void { - this.basePath = path - this.store.set('basePath', path) - this.ensureDirectories() + this.basePath = path; + this.store.set("basePath", path); + this.ensureDirectories(); } getPhpPath(version: string): string { - return join(this.basePath, 'php', `php-${version}`) + return join(this.basePath, "php", `php-${version}`); } getMysqlPath(version: string): string { - return join(this.basePath, 'mysql', `mysql-${version}`) + return join(this.basePath, "mysql", `mysql-${version}`); } getNginxPath(): string { - return join(this.basePath, 'nginx') + return join(this.basePath, "nginx"); } getRedisPath(): string { - return join(this.basePath, 'redis') + return join(this.basePath, "redis"); } getNodePath(): string { - return join(this.basePath, 'nodejs') + return join(this.basePath, "nodejs"); } getLogsPath(): string { - return join(this.basePath, 'logs') + return join(this.basePath, "logs"); } getTempPath(): string { - return join(this.basePath, 'temp') + return join(this.basePath, "temp"); } getWwwPath(): string { - return join(this.basePath, 'www') + return join(this.basePath, "www"); } getSitesAvailablePath(): string { - return join(this.basePath, 'nginx', 'sites-available') + return join(this.basePath, "nginx", "sites-available"); } getSitesEnabledPath(): string { - return join(this.basePath, 'nginx', 'sites-enabled') + return join(this.basePath, "nginx", "sites-enabled"); } getSSLPath(): string { - return join(this.basePath, 'nginx', 'ssl') + return join(this.basePath, "nginx", "ssl"); } addPhpVersion(version: string): void { - const versions = this.store.get('phpVersions') + const versions = this.store.get("phpVersions"); if (!versions.includes(version)) { - versions.push(version) - this.store.set('phpVersions', versions) + versions.push(version); + this.store.set("phpVersions", versions); } } removePhpVersion(version: string): void { - const versions = this.store.get('phpVersions') - const index = versions.indexOf(version) + const versions = this.store.get("phpVersions"); + const index = versions.indexOf(version); if (index > -1) { - versions.splice(index, 1) - this.store.set('phpVersions', versions) + versions.splice(index, 1); + this.store.set("phpVersions", versions); } } addMysqlVersion(version: string): void { - const versions = this.store.get('mysqlVersions') + const versions = this.store.get("mysqlVersions"); if (!versions.includes(version)) { - versions.push(version) - this.store.set('mysqlVersions', versions) + versions.push(version); + this.store.set("mysqlVersions", versions); } } removeMysqlVersion(version: string): void { - const versions = this.store.get('mysqlVersions') - const index = versions.indexOf(version) + const versions = this.store.get("mysqlVersions"); + const index = versions.indexOf(version); if (index > -1) { - versions.splice(index, 1) - this.store.set('mysqlVersions', versions) + versions.splice(index, 1); + this.store.set("mysqlVersions", versions); } } addSite(site: SiteConfig): void { - const sites = this.store.get('sites') - sites.push(site) - this.store.set('sites', sites) + const sites = this.store.get("sites"); + sites.push(site); + this.store.set("sites", sites); } removeSite(name: string): void { - const sites = this.store.get('sites') - const index = sites.findIndex(s => s.name === name) + const sites = this.store.get("sites"); + const index = sites.findIndex((s) => s.name === name); if (index > -1) { - sites.splice(index, 1) - this.store.set('sites', sites) + sites.splice(index, 1); + this.store.set("sites", sites); } } updateSite(name: string, site: Partial): void { - const sites = this.store.get('sites') - const index = sites.findIndex(s => s.name === name) + const sites = this.store.get("sites"); + const index = sites.findIndex((s) => s.name === name); if (index > -1) { // 如果传入完整对象则替换,否则合并 if (site.domain && site.rootPath) { - sites[index] = site as SiteConfig + sites[index] = site as SiteConfig; } else { - sites[index] = { ...sites[index], ...site } + sites[index] = { ...sites[index], ...site }; } - this.store.set('sites', sites) + this.store.set("sites", sites); } } getSites(): SiteConfig[] { - return this.store.get('sites') + return this.store.get("sites"); } } - diff --git a/package.json b/package.json index 94ce2ae..41412aa 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,10 @@ "appId": "com.phper.devmanager", "productName": "PHPer开发环境管理器", "copyright": "Copyright © 2024 PHPer", + "icon": "build/icon.ico", "directories": { - "output": "release" + "output": "release", + "buildResources": "build" }, "files": [ "dist/**/*", @@ -64,6 +66,7 @@ ] } ], + "icon": "build/icon.ico", "requestedExecutionLevel": "requireAdministrator", "signAndEditExecutable": false }, diff --git a/public/icon.ico b/public/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0a1b73f940022093bd0d904f9b658d7c06959a32 GIT binary patch literal 20698 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 literal 8904 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 WK -
-
-

启动时自动运行所有服务

-

开机自启时自动启动 Nginx、MySQL、Redis 等服务

-
-
- -
-
@@ -168,14 +155,12 @@ interface ServiceAutoStart { interface AppSettings { autoLaunch: boolean startMinimized: boolean - autoStartServices: boolean } const basePath = ref('') const appSettings = reactive({ autoLaunch: false, - startMinimized: false, - autoStartServices: false + startMinimized: false }) const services = reactive([ @@ -191,7 +176,6 @@ const loadSettings = async () => { // 加载应用设置 appSettings.autoLaunch = await window.electronAPI?.app?.getAutoLaunch() || false appSettings.startMinimized = await window.electronAPI?.app?.getStartMinimized() || false - appSettings.autoStartServices = await window.electronAPI?.app?.getAutoStartServices() || false // 加载服务自启动设置 for (const service of services) { @@ -210,7 +194,6 @@ const toggleAutoLaunch = async (enabled: boolean) => { if (!enabled) { // 禁用开机自启时,同时禁用相关选项 appSettings.startMinimized = false - appSettings.autoStartServices = false } } else { ElMessage.error(result?.message || '设置失败') @@ -232,16 +215,6 @@ const toggleStartMinimized = async (enabled: boolean) => { } } -const toggleAutoStartServices = async (enabled: boolean) => { - try { - await window.electronAPI?.app?.setAutoStartServices(enabled) - ElMessage.success(enabled ? '已启用自动启动服务' : '已禁用自动启动服务') - } catch (error: any) { - ElMessage.error(error.message) - appSettings.autoStartServices = !enabled - } -} - const toggleAutoStart = async (name: string, enabled: boolean) => { try { const result = await window.electronAPI?.service.setAutoStart(name, enabled)