Electron 客户端开机自启动

news/2025/3/31 9:30:47/文章来源:https://www.cnblogs.com/risheng/p/18797426

app.setLoginItemSettings 与 auto-launch 对比分析

一、稳定性对比

1. app.setLoginItemSettings

  • 优点:作为Electron官方API,有官方维护和支持
  • 缺点
    • 在某些Windows版本上存在已知问题
    • 部分Windows 10/11更新后可能失效
    • 在macOS权限更严格的版本上可能需要额外授权
    • 不支持Linux

2. auto-launch

  • 优点
    • 针对各平台做了特殊适配(Windows用注册表,macOS用Launch Services,Linux用.desktop文件)
    • 对系统权限问题有更好的处理和反馈
    • 经过多年实践验证,在各种系统环境下更稳定
  • 缺点
    • 依赖第三方库,理论上有维护风险(但该库活跃度良好)

二、易用性对比

1. app.setLoginItemSettings

// 设置自启动
app.setLoginItemSettings({openAtLogin: true,openAsHidden: false
})// 检查状态 - 没有Promise支持
const status = app.getLoginItemSettings()
console.log('是否自启动:', status.openAtLogin)

2. auto-launch

// 创建实例
const autoLauncher = new AutoLaunch({name: app.getName(),path: app.getPath('exe')
})// 检查状态 - 支持Promise
const isEnabled = await autoLauncher.isEnabled()// 启用/禁用 - 链式调用友好
autoLauncher.isEnabled().then(isEnabled => {if (!isEnabled) return autoLauncher.enable()}).then(() => console.log('自启动已启用')).catch(err => console.error('操作失败', err))

三、功能对比

功能 app.setLoginItemSettings auto-launch
Windows支持
macOS支持
Linux支持
Promise支持
错误处理 有限 完善
状态检查 简单 完善
隐藏启动 ✅ (macOS 已弃用)
维护状态 官方维护 社区活跃

四、实际使用

1. auto-launch.ts 文件

pnpm install auto-launch
import AutoLaunch from 'auto-launch'
import { app } from 'electron'
import log from 'electron-log/main'/*** 设置应用开机自启动* @param enable 是否启用自启动,默认为true*/
export function setupAutoLaunch(enable: boolean = true): void {const autoLauncher = new AutoLaunch({name: app.getName(),path: process.execPath,})if (enable) {autoLauncher.isEnabled().then((isEnabled) => {if (!isEnabled) {autoLauncher.enable().then(() => log.info('已启用自启动')).catch(err => log.error('启用自启动失败:', err))}else {log.info('自启动已经启用')}}).catch(err => log.error('检查自启动状态失败:', err))}else {autoLauncher.isEnabled().then((isEnabled) => {if (isEnabled) {autoLauncher.disable().then(() => log.info('已禁用自启动')).catch(err => log.error('禁用自启动失败:', err))}else {log.info('自启动已经禁用')}}).catch(err => log.error('检查自启动状态失败:', err))}
}

2. 在 main/index.ts 文件中使用

import { setupAutoLaunch } from './utils/auto-launch'async function electronAppInit() {log.info('主进程已启动')// 设置应用自启动setupAutoLaunch(true)app.on('window-all-closed', () => {if (process.platform !== PLATFORM.DARWIN) {log.info('主进程已关闭')app.quit()}})
}

3. 体验

实际开发中,auto-launch 提供了更一致的开发体验:

  1. 错误处理更清晰:当遇到权限问题时,auto-launch 提供明确的错误信息,而 app.setLoginItemSettings 可能静默失败
  2. Windows兼容性更好:Windows系统更新频繁,auto-launch 通过直接操作注册表提供了更稳定的行为
  3. 跨平台一致性:如果你的应用需要支持Linux,只能选择 auto-launch
  4. 代码组织更清晰:Promise支持让异步操作处理更优雅

五、结论

综合稳定性和易用性考虑,推荐使用 auto-launch,特别是:

  1. 如果你的应用需要支持Linux
  2. 如果你重视更好的错误处理和用户反馈
  3. 如果你的应用在Windows平台有较多用户(Windows更新可能影响原生API)

app.setLoginItemSettings 更适合简单场景,或者你特别关注减少依赖项的情况。但整体而言,auto-launch 提供了更可靠和一致的开发体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PLM软件实施最佳实践:企业如何高效落地?

PLM(Product Lifecycle Management)软件,即产品生命周期管理软件,旨在助力企业对产品从概念设计到退役处理的全生命周期进行有效管理。通过整合产品数据、流程以及人员,PLM软件能显著提升企业的创新能力、生产效率并降低成本。然而,PLM软件的实施并非易事,众多企业在落地…

HTTP500代码怎么解决?常见的5xx网页错误及其原因

要修复5xxx错误,您需要解决服务器上导致该错误的问题,这可能需要代码调试、配置更新或安装新的系统组件,接下来为大家带来HTTP 500错误的解决方法,和常见的5xx网页错误及其原因。错误 500 是什么? HTTP 500 响应代码并不表示实际问题,它只是通知您服务器出现了问题。 内部…

Vue 插槽 slot-scope=scope

============================================================== 默认插槽 只有一个slot 具名插槽 当有多个slot时,每个slot有名字的插槽(name) 只有template才能用v-slot 【这个是新设计的技术 Vue2.6以后用的】作用域插槽 反向传数据 App.vue中,必须用 template 数…

VMware Workstation不支持的硬件版本,模块Upgrade启动失败

1、我是从高版本的VMware Workstation降级后,再打开之前的虚拟机报错如下 2、打开虚拟机文件目录,用文本打开虚拟机的 .vmx文件,搜索定位到 virtualHW 字段,修改该字段为自己当前VMware版本,然后保存并开机

Next.js中间件权限绕过漏洞分析(CVE-2025-29927)

本文代码版本为next.js-15.2.2 本篇文章首发在先知社区:https://xz.aliyun.com/news/17403 一、漏洞概述 CVE-2025-29927是Next.js框架中存在的一个高危中间件逻辑绕过漏洞,允许攻击者通过构造特定HTTP请求头,绕过中间件的安全控制逻辑(如身份验证、路径重写、CSP防护等)。…

vue+openlayers示例:线水流效果(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:推荐v16+。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: …

蓝屏STOP:0x0000007B

生产线需要,得准备一台Windows XP的操作系统电脑。在安装时,出现下面蓝屏,A problem has been detected and windows has been shut down to prevent damage to your computer. If this is the first time youve seen this stop error screen, restart your computer. If th…

必看!2025 年颠覆测试行业的 10 大 AI 自动化测试工具/平台(上篇)

大家好,我是狂师。 上周小孩子生病,住院照顾,停更了几天。 各位看官,等着急了吧,之前有粉丝后台留言,想了解学习一下,AI这么火爆,那市面上AI与自动化测试结合起来的有哪些推荐的工具/平台。 今天就这个话题来聊一聊。 前言 在软件迭代以“天”为单位的今天,随着软件迭…

2025年企业必读指南:文件摆渡系统的5大核心功能

在数字化转型的浪潮中,企业面临着前所未有的挑战与机遇。优化信息流转、提升协作效率、确保数据安全及合规性,已成为企业持续发展的关键要素。在这一背景下,文件摆渡系统作为连接不同网络、网域之间的桥梁,承担着文件传输、共享、管理和归档等多重任务,其重要性日益凸显。…

利用AI增强VS Code TypeScript插件:AnyToTS带来编程新体验

Any to TS: VSCode 扩展插件 概述 "Any to TS" 是一个强大的 VSCode 扩展插件,旨在将任何对象转换为 TypeScript 类型或接口。该工具基于 vscode-json-to-ts 进行功能扩展,提供了一系列便捷的功能,帮助开发者更高效地处理 TypeScript 类型定义。 核心功能 传统功能…

虚函数表里有什么?(一)——从一个普通类开始

本系列文章,旨在探究C++虚函数表中除函数地址以外的条目,以及这些条目的设计意图和作用,并介绍与此相关的C++类对象内存布局,最后将两者用图解的形式结合起来,给读者带来全局性的视角。让我们从一个简单的类出发,开启我们的探索之旅。前言 本系列文章,旨在探究C++虚函数…

《HelloGitHub》第 108 期

兴趣是最好的老师,HelloGitHub 让你对开源感兴趣!简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短…