app
控制应用程序的事件生命周期。
进程:主进程
以下示例演示了如何在最后一个窗口关闭时退出应用程序
const { app } = require('electron')
app.on('window-all-closed', () => {
app.quit()
})
事件
app
对象发出以下事件
事件:'will-finish-launching'
当应用程序完成基本启动时发出。在 Windows 和 Linux 上,will-finish-launching
事件与 ready
事件相同;在 macOS 上,此事件表示 NSApplication
的 applicationWillFinishLaunching
通知。
在大多数情况下,您应该在 ready
事件处理程序中执行所有操作。
事件:'ready'
返回值
event
事件launchInfo
Record<string, any> | NotificationResponse macOS
Electron 完成初始化后发出一次。在 macOS 上,launchInfo
包含用于打开应用程序的 NSUserNotification
的 userInfo
或来自 UNNotificationResponse
的信息(如果它是从通知中心启动的)。您还可以调用 app.isReady()
来检查此事件是否已经触发,以及 app.whenReady()
来获取 Electron 初始化时完成的 Promise。
注意:ready
事件仅在主进程完成事件循环的第一个 Tick 后才会触发。如果在 ready
事件之前需要调用 Electron API,请确保在主进程的顶级上下文中同步调用它。
事件:'window-all-closed'
所有窗口都关闭时发出。
如果您没有订阅此事件并且所有窗口都已关闭,则默认行为是退出应用程序;但是,如果您订阅了,则可以控制应用程序是否退出。如果用户按下 Cmd + Q
或开发人员调用 app.quit()
,Electron 将首先尝试关闭所有窗口,然后发出 will-quit
事件,在这种情况下,不会发出 window-all-closed
事件。
事件:'before-quit'
返回值
event
事件
应用程序开始关闭其窗口之前发出。调用 event.preventDefault()
将阻止默认行为,即终止应用程序。
注意:如果应用程序退出是由 autoUpdater.quitAndInstall()
发起的,则在对所有窗口发出 close
事件并关闭它们之后发出 before-quit
。
注意:在 Windows 上,如果应用程序由于系统关机/重启或用户注销而关闭,则不会发出此事件。
事件:'will-quit'
返回值
event
事件
所有窗口都关闭并且应用程序将退出时发出。调用 event.preventDefault()
将阻止默认行为,即终止应用程序。
有关 will-quit
和 window-all-closed
事件之间的差异,请参阅 window-all-closed
事件的说明。
注意:在 Windows 上,如果应用程序由于系统关机/重启或用户注销而关闭,则不会发出此事件。
事件:'quit'
返回值
event
事件exitCode
整数
应用程序退出时发出。
注意:在 Windows 上,如果应用程序由于系统关机/重启或用户注销而关闭,则不会发出此事件。
事件:'open-file' macOS
返回值
event
事件path
字符串
当用户想要使用应用程序打开文件时发出。当应用程序已打开并且操作系统想要重用应用程序来打开文件时,通常会发出 open-file
事件。当文件被拖放到停靠栏并且应用程序尚未运行时,也会发出 open-file
。确保在应用程序启动的早期(甚至在发出 ready
事件之前)侦听 open-file
事件以处理这种情况。
如果您想处理此事件,则应调用 event.preventDefault()
。
在 Windows 上,您必须解析 process.argv
(在主进程中)以获取文件路径。
事件:'open-url' macOS
返回值
event
事件url
字符串
当用户想要使用应用程序打开 URL 时发出。您的应用程序的 Info.plist
文件必须在 CFBundleURLTypes
键中定义 URL 方案,并将 NSPrincipalClass
设置为 AtomApplication
。
与 open-file
事件一样,请务必在应用程序启动的早期注册 open-url
事件的侦听器,以检测应用程序是否正在打开以处理 URL。如果您在响应 ready
事件时注册侦听器,则会错过触发应用程序启动的 URL。
事件:'activate' macOS
返回值
event
事件hasVisibleWindows
布尔值
应用程序激活时发出。各种操作都可以触发此事件,例如首次启动应用程序、在应用程序已运行时尝试重新启动应用程序,或单击应用程序的停靠栏或任务栏图标。
事件:'did-become-active' macOS
返回值
event
事件
应用程序变为活动状态时发出。这与 activate
事件的不同之处在于,did-become-active
每次应用程序变为活动状态时都会发出,而不仅仅是在单击停靠栏图标或重新启动应用程序时发出。当用户通过 macOS 应用程序切换器切换到应用程序时,也会发出它。
事件:'did-resign-active' macOS
返回值
event
事件
应用程序不再处于活动状态且没有焦点时发出。例如,可以通过单击另一个应用程序或使用 macOS 应用程序切换器切换到另一个应用程序来触发此操作。
事件:'continue-activity' macOS
返回值
event
事件type
字符串 - 用于识别活动的字符串。映射到NSUserActivity.activityType
。userInfo
未知 - 包含活动在另一台设备上存储的特定于应用程序的状态。details
对象webpageURL
字符串(可选) - 用于识别活动在另一台设备上访问的网页的 URL 的字符串(如果可用)。
在 Handoff 期间发出,当来自不同设备的活动想要恢复时。如果您想处理此事件,则应调用 event.preventDefault()
。
用户活动只能在与活动的源应用程序具有相同开发者团队 ID 且支持活动的类型的应用程序中继续。支持的活动类型在应用程序的 Info.plist
中的 NSUserActivityTypes
键下指定。
事件:'will-continue-activity' macOS
返回值
event
事件type
字符串 - 用于识别活动的字符串。映射到NSUserActivity.activityType
。
在 Handoff 期间发出,在来自不同设备的活动想要恢复之前。如果您想处理此事件,则应调用 event.preventDefault()
。
事件:'continue-activity-error' macOS
返回值
event
事件type
字符串 - 用于识别活动的字符串。映射到NSUserActivity.activityType
。error
字符串 - 包含错误的本地化描述的字符串。
在 Handoff 期间发出,当来自不同设备的活动无法恢复时。
事件:'activity-was-continued' macOS
返回值
event
事件type
字符串 - 用于识别活动的字符串。映射到NSUserActivity.activityType
。userInfo
未知 - 包含活动存储的特定于应用程序的状态。
在 Handoff 期间发出,在来自此设备的活动已成功在另一个设备上恢复之后。
事件: 'update-activity-state' macOS
返回值
event
事件type
字符串 - 用于识别活动的字符串。映射到NSUserActivity.activityType
。userInfo
未知 - 包含活动存储的特定于应用程序的状态。
当Handoff即将在另一个设备上恢复时发出。如果您需要更新要传输的状态,则应立即调用event.preventDefault()
,构造一个新的userInfo
字典并及时调用app.updateCurrentActivity()
。否则,操作将失败,并将调用continue-activity-error
。
事件: 'new-window-for-tab' macOS
返回值
event
事件
当用户点击原生 macOS 新标签按钮时发出。只有当当前的BrowserWindow
具有tabbingIdentifier
时,新标签按钮才会可见。
事件: 'browser-window-blur'
返回值
event
事件window
BrowserWindow
当一个browserWindow失去焦点时发出。
事件: 'browser-window-focus'
返回值
event
事件window
BrowserWindow
当一个browserWindow获得焦点时发出。
事件: 'browser-window-created'
返回值
event
事件window
BrowserWindow
当一个新的browserWindow被创建时发出。
事件: 'web-contents-created'
返回值
event
事件webContents
WebContents
当一个新的webContents被创建时发出。
事件: 'certificate-error'
返回值
event
事件webContents
WebContentsurl
字符串error
字符串 - 错误代码certificate
Certificatecallback
函数isTrusted
布尔值 - 是否将证书视为受信任的
isMainFrame
布尔值
当无法验证url
的certificate
时发出,要信任证书,您应该使用event.preventDefault()
阻止默认行为并调用callback(true)
。
const { app } = require('electron')
app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
if (url === 'https://github.com') {
// Verification logic.
event.preventDefault()
callback(true)
} else {
callback(false)
}
})
事件: 'select-client-certificate'
返回值
event
事件webContents
WebContentsurl
URLcertificateList
Certificate[]callback
函数certificate
Certificate (可选)
当请求客户端证书时发出。
url
对应于请求客户端证书的导航条目,并且callback
可以使用从列表中过滤出的条目进行调用。使用event.preventDefault()
可以防止应用程序使用存储中的第一个证书。
const { app } = require('electron')
app.on('select-client-certificate', (event, webContents, url, list, callback) => {
event.preventDefault()
callback(list[0])
})
事件: 'login'
返回值
event
事件webContents
WebContents (可选)authenticationResponseDetails
对象url
URLpid
数字
authInfo
对象isProxy
布尔值scheme
字符串host
字符串port
整数realm
字符串
callback
函数username
字符串 (可选)password
字符串 (可选)
当webContents
或实用程序进程想要执行基本身份验证时发出。
默认行为是取消所有身份验证。要覆盖此行为,您应该使用event.preventDefault()
阻止默认行为,并使用凭据调用callback(username, password)
。
const { app } = require('electron')
app.on('login', (event, webContents, details, authInfo, callback) => {
event.preventDefault()
callback('username', 'secret')
})
如果在没有用户名或密码的情况下调用callback
,则身份验证请求将被取消,并且身份验证错误将返回到页面。
事件: 'gpu-info-update'
每当GPU信息更新时发出。
事件: 'render-process-gone'
返回值
event
事件webContents
WebContentsdetails
RenderProcessGoneDetails
当渲染器进程意外消失时发出。这通常是由于它崩溃或被杀死。
事件: 'child-process-gone'
返回值
event
事件details
对象type
字符串 - 进程类型。以下值之一实用程序
Zygote
沙盒助手
GPU
Pepper 插件
Pepper 插件代理
未知
reason
字符串 - 子进程消失的原因。可能的值clean-exit
- 进程以退出代码0退出abnormal-exit
- 进程以非零退出代码退出killed
- 进程收到 SIGTERM 或以其他方式被外部杀死crashed
- 进程崩溃oom
- 进程内存不足launch-failed
- 进程从未成功启动integrity-failure
- Windows 代码完整性检查失败
exitCode
数字 - 进程的退出代码(例如,如果在 posix 上,则来自 waitpid 的状态,如果在 Windows 上,则来自 GetExitCodeProcess)。serviceName
字符串 (可选) - 进程的非本地化名称。name
字符串 (可选) - 进程的名称。实用程序的示例:音频服务
、内容解密模块服务
、网络服务
、视频捕获
等。
当子进程意外消失时发出。这通常是由于它崩溃或被杀死。它不包括渲染器进程。
事件: 'accessibility-support-changed' macOS Windows
返回值
event
事件accessibilitySupportEnabled
布尔值 - 当 Chrome 的辅助功能支持启用时为true
,否则为false
。
当 Chrome 的辅助功能支持发生变化时发出。当启用或禁用辅助技术(如屏幕阅读器)时,此事件会触发。有关更多详细信息,请参阅https://www.chromium.org/developers/design-documents/accessibility。
事件: 'session-created'
返回值
session
Session
当 Electron 创建了一个新的session
时发出。
const { app } = require('electron')
app.on('session-created', (session) => {
console.log(session)
})
事件: 'second-instance'
返回值
event
事件argv
字符串[] - 第二个实例的命令行参数数组workingDirectory
字符串 - 第二个实例的工作目录additionalData
未知 - 从第二个实例传递的其他数据的 JSON 对象
当第二个实例已执行并调用app.requestSingleInstanceLock()
时,此事件将在应用程序的主实例中发出。
argv
是第二个实例的命令行参数的数组,workingDirectory
是其当前工作目录。通常,应用程序会通过使主窗口获得焦点并取消最小化来响应此事件。
注意:argv
不会与传递给第二个实例的完全相同的参数列表相同。顺序可能会更改,并且可能会附加其他参数。如果您需要保持完全相同的参数,建议改为使用additionalData
。
注意:如果第二个实例是由与第一个实例不同的用户启动的,则argv
数组将不包含参数。
此事件保证在app
的ready
事件发出后发出。
注意:Chromium 可能会添加额外的命令行参数,例如--original-process-start-time
。
方法
app
对象具有以下方法
注意:某些方法仅在特定操作系统上可用,并已标注。
app.quit()
尝试关闭所有窗口。首先将发出before-quit
事件。如果所有窗口都成功关闭,则将发出will-quit
事件,并且默认情况下应用程序将终止。
此方法保证所有beforeunload
和unload
事件处理程序都已正确执行。窗口可能会通过在beforeunload
事件处理程序中返回false
来取消退出。
app.exit([exitCode])
exitCode
整数 (可选)
立即以exitCode
退出。exitCode
默认为0。
所有窗口都将立即关闭,无需询问用户,并且不会发出before-quit
和will-quit
事件。
app.relaunch([options])
在当前实例退出时重新启动应用程序。
默认情况下,新实例将使用与当前实例相同的工作目录和命令行参数。当指定args
时,args
将作为命令行参数传递。当指定execPath
时,将执行execPath
以重新启动,而不是当前应用程序。
请注意,此方法在执行时不会退出应用程序,您必须在调用app.relaunch
后调用app.quit
或app.exit
才能使应用程序重新启动。
当多次调用app.relaunch
时,在当前实例退出后将启动多个实例。
立即重新启动当前实例并向新实例添加新命令行参数的示例
const { app } = require('electron')
app.relaunch({ args: process.argv.slice(1).concat(['--relaunch']) })
app.exit(0)
app.isReady()
返回布尔值
- 如果 Electron 已完成初始化,则为true
,否则为false
。另请参阅app.whenReady()
。
app.whenReady()
返回 Promise<void>
- 当 Electron 初始化完成后 fulfilled。如果应用程序尚未准备好,则可以用作检查 app.isReady()
和订阅 ready
事件的便捷替代方案。
app.focus([options])
在 Linux 上,聚焦于第一个可见窗口。在 macOS 上,使应用程序成为活动应用程序。在 Windows 上,聚焦于应用程序的第一个窗口。
您应该尽可能少地使用 steal
选项。
app.hide()
macOS
隐藏所有应用程序窗口,但不将其最小化。
app.isHidden()
macOS
返回 boolean
- 如果应用程序(包括其所有窗口)已隐藏(例如,使用 Command-H
),则返回 true
,否则返回 false
。
app.show()
macOS
在隐藏应用程序窗口后显示它们。不会自动聚焦它们。
app.setAppLogsPath([path])
path
字符串(可选) - 日志的自定义路径。必须是绝对路径。
设置或创建应用程序日志的目录,然后可以使用 app.getPath()
或 app.setPath(pathName, newPath)
对其进行操作。
在不带 path
参数的情况下调用 app.setAppLogsPath()
将导致此目录在 macOS 上设置为 ~/Library/Logs/YourAppName
,在 Linux 和 Windows 上设置为 userData
目录内。
app.getAppPath()
返回 string
- 当前应用程序目录。
app.getPath(name)
name
字符串 - 您可以通过名称请求以下路径home
用户的主目录。appData
每个用户的应用程序数据目录,默认指向- Windows 上的
%APPDATA%
- Linux 上的
$XDG_CONFIG_HOME
或~/.config
- macOS 上的
~/Library/Application Support
- Windows 上的
userData
用于存储应用程序配置文件的目录,默认情况下是appData
目录附加应用程序名称。按照惯例,存储用户数据的文件应写入此目录,并且不建议在此处写入大型文件,因为某些环境可能会将此目录备份到云存储。sessionData
用于存储由Session
生成的数据的目录,例如 localStorage、cookie、磁盘缓存、下载的字典、网络状态、devtools 文件。默认情况下,它指向userData
。Chromium 可能会在此处写入非常大的磁盘缓存,因此,如果您的应用程序不依赖于浏览器存储(如 localStorage 或 cookie)来保存用户数据,建议将此目录设置为其他位置,以避免污染userData
目录。temp
临时目录。exe
当前的可执行文件。module
libchromiumcontent
库。desktop
当前用户的桌面目录。documents
用户“我的文档”目录。downloads
用户下载目录。music
用户音乐目录。pictures
用户图片目录。videos
用户视频目录。recent
用户最近的文件目录(仅限 Windows)。logs
应用程序日志文件夹目录。crashDumps
存储崩溃转储的目录。
返回 string
- 与 name
关联的特殊目录或文件的路径。如果失败,则会抛出 Error
。
如果在先调用 app.setAppLogsPath()
之前调用了 app.getPath('logs')
,则将创建一个默认的日志目录,等同于在不带 path
参数的情况下调用 app.setAppLogsPath()
。
app.getFileIcon(path[, options])
path
字符串
返回 Promise<NativeImage>
- 以应用程序图标作为 fulfilled,它是一个 NativeImage。
获取路径关联的图标。
在 Windows 上,有两种图标
- 与某些文件扩展名关联的图标,例如
.mp3
、.png
等。 - 文件本身内的图标,例如
.exe
、.dll
、.ico
。
在 Linux 和 macOS 上,图标取决于与文件 MIME 类型关联的应用程序。
app.setPath(name, path)
name
字符串path
字符串
覆盖与 name
关联的特殊目录或文件的 path
。如果路径指定一个不存在的目录,则会抛出 Error
。在这种情况下,应使用 fs.mkdirSync
或类似方法创建该目录。
您只能覆盖 app.getPath
中定义的 name
的路径。
默认情况下,网页的 cookie 和缓存将存储在 sessionData
目录下。如果要更改此位置,则必须在 app
模块的 ready
事件发出之前覆盖 sessionData
路径。
app.getVersion()
返回 string
- 加载的应用程序的版本。如果在应用程序的 package.json
文件中找不到版本,则返回当前捆绑包或可执行文件的版本。
app.getName()
返回 string
- 当前应用程序的名称,即应用程序 package.json
文件中的名称。
通常,package.json
的 name
字段根据 npm 模块规范是一个简短的小写名称。您通常还应该指定一个 productName
字段,它是应用程序的完整大写名称,Electron 将优先于 name
使用它。
app.setName(name)
name
字符串
覆盖当前应用程序的名称。
注意:此函数覆盖 Electron 内部使用的名称;它不影响操作系统使用的名称。
app.getLocale()
返回 string
- 当前应用程序区域设置,使用 Chromium 的 l10n_util
库获取。可能的返回值记录在 此处。
要设置区域设置,您需要在应用程序启动时使用命令行开关,可以在 此处找到。
注意:分发打包的应用程序时,还必须附带 locales
文件夹。
注意:必须在发出 ready
事件后调用此 API。
注意:要查看此 API 与其他区域设置和语言 API 的示例返回值,请参阅 app.getPreferredSystemLanguages()
。
app.getLocaleCountryCode()
返回 string
- 用户操作系统的区域设置两位 ISO 3166 国家代码。该值取自本机操作系统 API。
注意:无法检测到区域设置国家代码时,它将返回空字符串。
app.getSystemLocale()
返回 string
- 当前系统区域设置。在 Windows 和 Linux 上,它使用 Chromium 的 i18n
库获取。在 macOS 上,使用 [NSLocale currentLocale]
。要获取用户的当前系统语言(并不总是与区域设置相同),最好使用 app.getPreferredSystemLanguages()
。
不同的操作系统也以不同的方式使用区域数据
- Windows 11 使用区域格式表示数字、日期和时间。
- macOS Monterey 使用区域格式化数字、日期、时间以及选择要使用的货币符号。
因此,此 API 可用于选择日历应用程序中渲染日期和时间的格式,尤其是在开发人员希望格式与操作系统保持一致时。
注意:必须在发出 ready
事件后调用此 API。
注意:要查看此 API 与其他区域设置和语言 API 的示例返回值,请参阅 app.getPreferredSystemLanguages()
。
app.getPreferredSystemLanguages()
返回 string[]
- 用户的首选系统语言,从最优先到最不优先,包括适用的国家/地区代码。用户可以通过 Windows 或 macOS 上的“语言和区域”设置修改和添加到此列表。
该 API 在 Windows 上使用 GlobalizationPreferences
(回退到 GetSystemPreferredUILanguages
),在 macOS 上使用 \[NSLocale preferredLanguages\]
,在 Linux 上使用 g_get_language_names
。
此 API 可用于确定以哪种语言显示应用程序。
以下是一些使用不同配置的各种语言和区域设置 API 的返回值示例
在 Windows 上,给定应用程序区域设置为德语,区域格式为芬兰语(芬兰),首选系统语言(从最优先到最不优先)为加拿大法语、美国英语、简体中文(中国)、芬兰语和拉丁美洲西班牙语
app.getLocale() // 'de'
app.getSystemLocale() // 'fi-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-CN', 'fi', 'es-419']
在 macOS 上,给定应用程序区域设置为德语,区域为芬兰,首选系统语言(从最优先到最不优先)为加拿大法语、美国英语、简体中文和拉丁美洲西班牙语
app.getLocale() // 'de'
app.getSystemLocale() // 'fr-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-FI', 'es-419']
这两个操作系统上的可用语言和区域以及可能的返回值都不同。
从上面的示例可以看出,在 Windows 上,首选系统语言可能没有国家/地区代码,并且其中一个首选系统语言可能与用于区域格式的语言相对应。在 macOS 上,区域更像是一个默认国家/地区代码:用户不需要将芬兰语作为首选语言才能使用芬兰作为区域,并且国家/地区代码 FI
用于语言名称中没有关联国家/地区的首选系统语言。
app.addRecentDocument(path)
macOS Windows
path
字符串
将 path
添加到最近使用的文档列表。
此列表由操作系统管理。在 Windows 上,您可以从任务栏访问此列表,在 macOS 上,您可以从 Dock 菜单访问此列表。
app.clearRecentDocuments()
macOS Windows
清除最近打开的文件列表。
app.setAsDefaultProtocolClient(protocol[, path, args])
protocol
字符串 - 协议名称,不包含://
。例如,如果希望您的应用处理electron://
链接,请使用electron
作为参数调用此方法。path
字符串(可选) Windows - Electron 可执行文件的路径。默认为process.execPath
args
字符串数组(可选) Windows - 传递给可执行文件的参数。默认为空数组
返回 boolean
- 调用是否成功。
将当前可执行文件设置为协议(也称为 URI 方案)的默认处理程序。它允许您将您的应用更深入地集成到操作系统中。注册后,所有包含 your-protocol://
的链接都将使用当前可执行文件打开。整个链接(包括协议)将作为参数传递给您的应用程序。
注意:在 macOS 上,您只能注册已添加到应用 info.plist
中的协议,该文件无法在运行时修改。但是,您可以通过 Electron Forge、Electron Packager 或使用文本编辑器编辑 info.plist
来在构建时更改该文件。有关详细信息,请参阅 Apple 文档。
注意:在 Windows 应用商店环境(当打包为 appx
时),此 API 将对所有调用返回 true
,但它设置的注册表项将无法被其他应用程序访问。为了将您的 Windows 应用商店应用程序注册为默认协议处理程序,您必须 在清单中声明协议。
此 API 在内部使用 Windows 注册表和 LSSetDefaultHandlerForURLScheme
。
app.removeAsDefaultProtocolClient(protocol[, path, args])
macOS Windows
protocol
字符串 - 协议名称,不包含://
。path
字符串(可选) Windows - 默认为process.execPath
args
字符串数组(可选) Windows - 默认为空数组
返回 boolean
- 调用是否成功。
此方法检查当前可执行文件是否为协议(也称为 URI 方案)的默认处理程序。如果是,它将删除该应用作为默认处理程序。
app.isDefaultProtocolClient(protocol[, path, args])
protocol
字符串 - 协议名称,不包含://
。path
字符串(可选) Windows - 默认为process.execPath
args
字符串数组(可选) Windows - 默认为空数组
返回 boolean
- 当前可执行文件是否为协议(也称为 URI 方案)的默认处理程序。
注意:在 macOS 上,您可以使用此方法检查应用是否已注册为协议的默认协议处理程序。您还可以通过检查 macOS 机器上的 ~/Library/Preferences/com.apple.LaunchServices.plist
来验证这一点。有关详细信息,请参阅 Apple 文档。
此 API 在内部使用 Windows 注册表和 LSCopyDefaultHandlerForURLScheme
。
app.getApplicationNameForProtocol(url)
url
字符串 - 包含要检查的协议名称的 URL。与该系列中的其他方法不同,此方法接受完整的 URL,至少包含://
(例如https://
)。
返回 string
- 处理协议的应用程序名称,如果没有任何处理程序则返回空字符串。例如,如果 Electron 是 URL 的默认处理程序,则在 Windows 和 Mac 上这可能是 Electron
。但是,不要依赖于不保证保持不变的精确格式。预计在 Linux 上会有不同的格式,可能带有 .desktop
后缀。
此方法返回 URL 的协议(也称为 URI 方案)的默认处理程序的应用程序名称。
app.getApplicationInfoForProtocol(url)
macOS Windows
url
字符串 - 包含要检查的协议名称的 URL。与该系列中的其他方法不同,此方法接受完整的 URL,至少包含://
(例如https://
)。
返回 Promise<Object>
- 解析包含以下内容的对象
icon
NativeImage - 处理协议的应用的显示图标。path
字符串 - 处理协议的应用的安装路径。name
字符串 - 处理协议的应用的显示名称。
此方法返回一个 Promise,其中包含 URL 的协议(也称为 URI 方案)的默认处理程序的应用程序名称、图标和路径。
app.setUserTasks(tasks)
Windows
tasks
Task[] -Task
对象数组
将 tasks
添加到 Windows 上的跳转列表的“任务”类别。
tasks
是 Task 对象的数组。
返回 boolean
- 调用是否成功。
注意:如果要进一步自定义跳转列表,请改用 app.setJumpList(categories)
。
app.getJumpListSettings()
Windows
返回 Object
minItems
整数 - 将在跳转列表中显示的最小项目数(有关此值的更详细说明,请参阅 MSDN 文档)。removedItems
JumpListItem[] - 与用户已明确从跳转列表中的自定义类别中删除的项目相对应的JumpListItem
对象数组。在对app.setJumpList()
的**下一次**调用中,不得将这些项目重新添加到跳转列表中,否则 Windows 将不会显示包含任何已删除项目的自定义类别。
app.setJumpList(categories)
Windows
categories
JumpListCategory[] |null
-JumpListCategory
对象数组。
返回 string
设置或删除应用程序的自定义跳转列表,并返回以下字符串之一
ok
- 没有出错。error
- 发生了一个或多个错误,启用运行时日志记录以找出可能的原因。invalidSeparatorError
- 尝试将分隔符添加到跳转列表中的自定义类别。分隔符仅允许在标准“任务”类别中。fileTypeRegistrationError
- 尝试将文件链接添加到跳转列表中,用于应用程序未注册处理的文件类型。customCategoryAccessDeniedError
- 由于用户隐私或组策略设置,无法将自定义类别添加到跳转列表。
如果 categories
为 null
,则先前设置的自定义跳转列表(如果有)将被应用程序的标准跳转列表(由 Windows 管理)替换。
注意:如果 JumpListCategory
对象既未设置 type
属性也未设置 name
属性,则其 type
假定为 tasks
。如果设置了 name
属性但省略了 type
属性,则 type
假定为 custom
。
注意:用户可以从自定义类别中删除项目,并且 Windows 不会允许将已删除的项目重新添加到自定义类别中,直到**下一次**成功调用 app.setJumpList(categories)
之后。在此之前尝试将已删除的项目重新添加到自定义类别中会导致整个自定义类别从跳转列表中省略。可以使用 app.getJumpListSettings()
获取已删除项目的列表。
注意:跳转列表项目的 description
属性的最大长度为 260 个字符。超过此限制,项目将不会添加到跳转列表中,也不会显示。
以下是如何创建自定义跳转列表的一个非常简单的示例
const { app } = require('electron')
app.setJumpList([
{
type: 'custom',
name: 'Recent Projects',
items: [
{ type: 'file', path: 'C:\\Projects\\project1.proj' },
{ type: 'file', path: 'C:\\Projects\\project2.proj' }
]
},
{ // has a name so `type` is assumed to be "custom"
name: 'Tools',
items: [
{
type: 'task',
title: 'Tool A',
program: process.execPath,
args: '--run-tool-a',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool A'
},
{
type: 'task',
title: 'Tool B',
program: process.execPath,
args: '--run-tool-b',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool B'
}
]
},
{ type: 'frequent' },
{ // has no name and no type so `type` is assumed to be "tasks"
items: [
{
type: 'task',
title: 'New Project',
program: process.execPath,
args: '--new-project',
description: 'Create a new project.'
},
{ type: 'separator' },
{
type: 'task',
title: 'Recover Project',
program: process.execPath,
args: '--recover-project',
description: 'Recover Project'
}
]
}
])
app.requestSingleInstanceLock([additionalData])
additionalData
Record<any, any>(可选) - 包含要发送到第一个实例的其他数据的 JSON 对象。
返回 boolean
此方法的返回值指示您的应用程序的此实例是否成功获取了锁。如果它未能获取锁,您可以假设您的应用程序的另一个实例已在运行并持有锁,并且应立即退出。
也就是说,如果您的进程是应用程序的主要实例,并且您的应用应该继续加载,则此方法返回 true
。如果您的进程应该立即退出,因为它已将其参数发送到已获取锁的另一个实例,则它返回 false
。
在 macOS 上,当用户尝试在 Finder 中打开应用的第二个实例时,系统会自动强制执行单实例,并且会为此发出 open-file
和 open-url
事件。但是,当用户在命令行中启动应用时,系统的单实例机制将被绕过,您必须使用此方法来确保单实例。
当第二个实例启动时,激活主要实例窗口的示例
const { app, BrowserWindow } = require('electron')
let myWindow = null
const additionalData = { myKey: 'myValue' }
const gotTheLock = app.requestSingleInstanceLock(additionalData)
if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', (event, commandLine, workingDirectory, additionalData) => {
// Print out data received from the second instance.
console.log(additionalData)
// Someone tried to run a second instance, we should focus our window.
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})
app.whenReady().then(() => {
myWindow = new BrowserWindow({})
myWindow.loadURL('https://www.electron.js.cn')
})
}
app.hasSingleInstanceLock()
返回 boolean
此方法返回您的应用的此实例当前是否持有单实例锁。您可以使用 app.requestSingleInstanceLock()
请求锁,并使用 app.releaseSingleInstanceLock()
释放锁。
app.releaseSingleInstanceLock()
释放由 requestSingleInstanceLock
创建的所有锁。这将允许应用程序的多个实例再次并排运行。
app.setUserActivity(type, userInfo[, webpageURL])
macOS
type
字符串 - 唯一标识活动。映射到NSUserActivity.activityType
。userInfo
any - 要存储以供其他设备使用的特定于应用的状态。webpageURL
字符串(可选) - 如果恢复设备上未安装合适的应用,则在浏览器中加载的网页。方案必须为http
或https
。
创建一个 NSUserActivity
并将其设置为当前活动。此活动之后有资格进行 Handoff 到另一台设备。
app.getCurrentActivityType()
macOS
返回 字符串
- 当前正在运行的活动的类型。
app.invalidateCurrentActivity()
macOS
使当前的 Handoff 用户活动无效。
app.resignCurrentActivity()
macOS
将当前的 Handoff 用户活动标记为非活动状态,但不使其无效。
app.updateCurrentActivity(type, userInfo)
macOS
type
字符串 - 唯一标识活动。映射到NSUserActivity.activityType
。userInfo
any - 要存储以供其他设备使用的特定于应用的状态。
如果当前活动的类型与 type
匹配,则更新当前活动,并将 userInfo
中的条目合并到其当前 userInfo
字典中。
app.setAppUserModelId(id)
Windows
id
字符串
将 应用程序用户模型 ID 更改为 id
。
app.setActivationPolicy(policy)
macOS
policy
字符串 - 可以是 'regular'、'accessory' 或 'prohibited'。
设置给定应用的激活策略。
激活策略类型
- 'regular' - 应用程序是一个普通的应用程序,显示在 Dock 中,并且可能具有用户界面。
- 'accessory' - 应用程序不会显示在 Dock 中,也没有菜单栏,但可以通过编程方式或单击其窗口之一来激活。
- 'prohibited' - 应用程序不会显示在 Dock 中,并且不能创建窗口或被激活。
app.importCertificate(options, callback)
Linux
callback
函数result
整数 - 导入的结果。
将 pkcs12 格式的证书导入到平台证书存储中。callback
会使用导入操作的 result
调用,值为 0
表示成功,而任何其他值都表示根据 Chromium net_error_list 失败。
app.configureHostResolver(options)
配置主机解析(DNS 和 DNS-over-HTTPS)。默认情况下,将按以下顺序使用以下解析器
- DNS-over-HTTPS,如果 DNS 提供商支持它,然后
- 内置解析器(默认情况下仅在 macOS 上启用),然后
- 系统的解析器(例如
getaddrinfo
)。
可以将其配置为限制非加密 DNS 的使用(secureDnsMode: "secure"
)或禁用 DNS-over-HTTPS(secureDnsMode: "off"
)。还可以启用或禁用内置解析器。
要禁用不安全的 DNS,可以指定 secureDnsMode
为 "secure"
。如果这样做,则应确保提供要使用的 DNS-over-HTTPS 服务器列表,以防用户的 DNS 配置不包含支持 DoH 的提供商。
const { app } = require('electron')
app.whenReady().then(() => {
app.configureHostResolver({
secureDnsMode: 'secure',
secureDnsServers: [
'https://cloudflare-dns.com/dns-query'
]
})
})
此 API 必须在发出 ready
事件后调用。
app.disableHardwareAcceleration()
禁用当前应用的硬件加速。
此方法只能在应用准备就绪之前调用。
app.disableDomainBlockingFor3DAPIs()
默认情况下,如果 GPU 进程崩溃过于频繁,Chromium 会在每个域的基础上禁用 3D API(例如 WebGL),直到重新启动。此函数禁用此行为。
此方法只能在应用准备就绪之前调用。
app.getAppMetrics()
返回 ProcessMetric[]:与应用关联的所有进程的内存和 CPU 使用情况统计信息相对应的 ProcessMetric
对象数组。
app.getGPUFeatureStatus()
返回 GPUFeatureStatus - 来自 chrome://gpu/
的图形功能状态。
注意:此信息仅在发出 gpu-info-update
事件后才能使用。
app.getGPUInfo(infoType)
infoType
字符串 - 可以是basic
或complete
。
返回 Promise<unknown>
对于 infoType
等于 complete
:Promise 以包含所有 GPU 信息的 Object
填充,如 chromium 的 GPUInfo 对象 中所示。这包括在 chrome://gpu
页面上显示的版本和驱动程序信息。
对于 infoType
等于 basic
:Promise 以包含比使用 complete
请求时更少的属性的 Object
填充。这是一个基本响应示例
{
auxAttributes:
{
amdSwitchable: true,
canSupportThreadedTextureMailbox: false,
directComposition: false,
directRendering: true,
glResetNotificationStrategy: 0,
inProcessGpu: true,
initializationTime: 0,
jpegDecodeAcceleratorSupported: false,
optimus: false,
passthroughCmdDecoder: false,
sandboxed: false,
softwareRendering: false,
supportsOverlays: false,
videoDecodeAcceleratorFlags: 0
},
gpuDevice:
[{ active: true, deviceId: 26657, vendorId: 4098 },
{ active: false, deviceId: 3366, vendorId: 32902 }],
machineModelName: 'MacBookPro',
machineModelVersion: '11.5'
}
如果只需要基本信息(如 vendorId
或 deviceId
),则应优先使用 basic
。
app.setBadgeCount([count])
Linux macOS
count
整数(可选) - 如果提供了一个值,则将徽章设置为提供的数值,否则,在 macOS 上,显示一个纯白色圆点(例如,未知通知数量)。在 Linux 上,如果未提供值,则徽章将不会显示。
返回 boolean
- 调用是否成功。
设置当前应用程序的计数器徽章。将计数设置为 0
将隐藏徽章。
在 macOS 上,它显示在 Dock 图标上。在 Linux 上,它仅适用于 Unity 启动器。
注意:Unity 启动器需要 .desktop
文件才能工作。有关更多信息,请阅读 Unity 集成文档。
注意:在 macOS 上,您需要确保您的应用程序具有显示通知的权限,才能使此方法正常工作。
app.getBadgeCount()
Linux macOS
返回 整数
- 计数器徽章中显示的当前值。
app.isUnityRunning()
Linux
返回 布尔值
- 当前桌面环境是否为 Unity 启动器。
app.getLoginItemSettings([options])
macOS Windows
如果您为 app.setLoginItemSettings
提供了 path
和 args
选项,则需要在此处传递相同的参数才能正确设置 openAtLogin
。
返回 Object
openAtLogin
布尔值 - 如果应用设置为在登录时打开,则为true
。openAsHidden
布尔值 macOS 已弃用 - 如果应用设置为在登录时隐藏打开,则为true
。这在 macOS 13 及更高版本上不起作用。wasOpenedAtLogin
布尔值 macOS - 如果应用在登录时自动打开,则为true
。wasOpenedAsHidden
布尔值 macOS 已弃用 - 如果应用作为隐藏的登录项打开,则为true
。这表示应用不应在启动时打开任何窗口。此设置在 MAS 构建 或 macOS 13 及更高版本上不可用。restoreState
布尔值 macOS 已弃用 - 如果应用作为登录项打开,并且应从上一个会话恢复状态,则为true
。这表示应用应恢复上次关闭时打开的窗口。此设置在 MAS 版本 或 macOS 13 及更高版本上不可用。status
字符串 macOS - 可以是not-registered
、enabled
、requires-approval
或not-found
之一。executableWillLaunchAtLogin
布尔值 Windows - 如果应用设置为在登录时打开且其运行键未停用,则为true
。这与openAtLogin
不同,因为它会忽略args
选项,如果给定的可执行文件将在登录时使用任何参数启动,则此属性将为 true。launchItems
对象数组 Windowsname
字符串 Windows - 注册表项的名称值。path
字符串 Windows - 与注册表项对应的应用程序的可执行文件。args
字符串数组 Windows - 传递给可执行文件的命令行参数。scope
字符串 Windows -user
或machine
之一。指示注册表项是在HKEY_CURRENT_USER
下还是HKEY_LOCAL_MACHINE
下。enabled
布尔值 Windows - 如果应用程序注册表项已启动批准,因此在任务管理器和 Windows 设置中显示为enabled
,则为true
。
app.setLoginItemSettings(settings)
macOS Windows
settings
对象openAtLogin
布尔值(可选) -true
表示在登录时打开应用程序,false
表示删除应用程序作为登录项。默认为false
。openAsHidden
布尔值(可选) macOS 已弃用 -true
表示以隐藏方式打开应用程序。默认为false
。用户可以从系统偏好设置中编辑此设置,因此在打开应用程序时应检查app.getLoginItemSettings().wasOpenedAsHidden
以了解当前值。此设置在 MAS 版本 或 macOS 13 及更高版本上不可用。type
字符串(可选) macOS - 要添加为登录项的服务类型。默认为mainAppService
。仅在 macOS 13 及更高版本上可用。mainAppService
- 主应用程序。agentService
- 启动代理程序的属性列表名称。属性列表名称必须与应用程序Contents/Library/LaunchAgents
目录中的属性列表相对应。daemonService
字符串(可选) macOS - 启动守护程序的属性列表名称。属性列表名称必须与应用程序Contents/Library/LaunchDaemons
目录中的属性列表相对应。loginItemService
字符串(可选) macOS - 登录项服务的属性列表名称。属性列表名称必须与应用程序Contents/Library/LoginItems
目录中的属性列表相对应。
serviceName
字符串(可选) macOS - 服务的名称。如果type
非默认值,则需要。仅在 macOS 13 及更高版本上可用。path
字符串(可选) Windows - 在登录时启动的可执行文件。默认为process.execPath
。args
字符串数组(可选) Windows - 传递给可执行文件的命令行参数。默认为空数组。注意用引号括住路径。enabled
布尔值(可选) Windows -true
将更改启动批准注册表项并在任务管理器和 Windows 设置中“启用/禁用”应用程序。默认为true
。name
字符串(可选) Windows - 要写入注册表的值名称。默认为应用程序的 AppUserModelId()。
设置应用程序的登录项设置。
要在 Windows 上使用 Electron 的 autoUpdater
,该更新器使用 Squirrel,您需要将启动路径设置为 Update.exe,并传递指定应用程序名称的参数。例如
const { app } = require('electron')
const path = require('node:path')
const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)
app.setLoginItemSettings({
openAtLogin: true,
path: updateExe,
args: [
'--processStart', `"${exeName}"`,
'--process-start-args', '"--hidden"'
]
})
有关在 macOS 13 及更高版本上将不同的服务设置为登录项的更多信息,请参阅 SMAppService
。
app.isAccessibilitySupportEnabled()
macOS Windows
返回 布尔值
- 如果启用了 Chrome 的辅助功能支持,则为 true
,否则为 false
。如果检测到辅助技术的用途(例如屏幕阅读器),则此 API 将返回 true
。有关更多详细信息,请参阅 https://www.chromium.org/developers/design-documents/accessibility。
app.setAccessibilitySupportEnabled(enabled)
macOS Windows
enabled
布尔值 - 启用或禁用 辅助功能树 渲染
手动启用 Chrome 的辅助功能支持,允许在应用程序设置中向用户公开辅助功能开关。有关更多详细信息,请参阅 Chromium 的辅助功能文档。默认情况下禁用。
此 API 必须在发出 ready
事件后调用。
注意:渲染辅助功能树会显著影响应用程序的性能。不应默认启用。
app.showAboutPanel()
显示应用程序的关于面板选项。这些选项可以使用 app.setAboutPanelOptions(options)
覆盖。此函数异步运行。
app.setAboutPanelOptions(options)
设置关于面板选项。这将覆盖 macOS 上应用程序的 .plist
文件中定义的值。有关更多详细信息,请参阅 Apple 文档。在 Linux 上,必须设置值才能显示;没有默认值。
如果您未设置 credits
但仍希望在您的应用程序中显示它们,则 AppKit 将按此顺序查找名为“Credits.html”、“Credits.rtf”和“Credits.rtfd”的文件,位于 NSBundle 类方法 main 返回的 bundle 中。找到的第一个文件将被使用,如果未找到任何文件,则信息区域将留空。有关更多信息,请参阅 Apple 文档。
app.isEmojiPanelSupported()
返回 布尔值
- 当前操作系统版本是否允许使用原生表情符号选择器。
app.showEmojiPanel()
macOS Windows
显示平台的原生表情符号选择器。
app.startAccessingSecurityScopedResource(bookmarkData)
MAS
bookmarkData
字符串 - 由dialog.showOpenDialog
或dialog.showSaveDialog
方法返回的 base64 编码的安全范围书签数据。
返回 函数
- 完成访问安全范围文件后,**必须**调用此函数。如果您忘记停止访问书签,则 内核资源将泄漏,并且您的应用程序将完全失去访问沙盒外部的能力,直到您的应用程序重新启动。
const { app, dialog } = require('electron')
const fs = require('node:fs')
let filepath
let bookmark
dialog.showOpenDialog(null, { securityScopedBookmarks: true }).then(({ filePaths, bookmarks }) => {
filepath = filePaths[0]
bookmark = bookmarks[0]
fs.readFileSync(filepath)
})
// ... restart app ...
const stopAccessingSecurityScopedResource = app.startAccessingSecurityScopedResource(bookmark)
fs.readFileSync(filepath)
stopAccessingSecurityScopedResource()
开始访问安全范围资源。使用此方法,为 Mac App Store 打包的 Electron 应用程序可以访问其沙盒外部,以访问用户选择的文件。有关此系统的工作原理的描述,请参阅 Apple 的文档。
app.enableSandbox()
在应用程序上启用完全沙盒模式。这意味着所有渲染器都将在沙盒中启动,而不管 WebPreferences
中 sandbox
标志的值如何。
此方法只能在应用准备就绪之前调用。
app.isInApplicationsFolder()
macOS
返回 布尔值
- 应用程序当前是否正在系统应用程序文件夹中运行。与 app.moveToApplicationsFolder()
结合使用
app.moveToApplicationsFolder([options])
macOS
返回 布尔值
- 移动是否成功。请注意,如果移动成功,您的应用程序将退出并重新启动。
默认情况下不会显示确认对话框。如果您希望允许用户确认操作,您可以使用 dialog
API 来执行此操作。
注意:如果除用户之外的任何其他原因导致移动失败,则此方法会抛出错误。例如,如果用户取消授权对话框,则此方法返回 false。如果我们无法执行复制,则此方法将抛出错误。错误中的消息应具有信息性,并准确告知您出了什么问题。
默认情况下,如果应用程序目录中存在与要移动的应用程序同名的应用程序且未运行,则现有应用程序将被删除,并且活动应用程序将移动到其位置。如果它正在运行,则预先存在的正在运行的应用程序将获得焦点,并且先前活动的应用程序将自行退出。可以通过提供可选的冲突处理程序来更改此行为,其中处理程序返回的布尔值确定是否以默认行为解决移动冲突。例如,返回false
将确保不采取进一步的操作,返回true
将导致默认行为并继续执行该方法。
例如
const { app, dialog } = require('electron')
app.moveToApplicationsFolder({
conflictHandler: (conflictType) => {
if (conflictType === 'exists') {
return dialog.showMessageBoxSync({
type: 'question',
buttons: ['Halt Move', 'Continue Move'],
defaultId: 0,
message: 'An app of this name already exists'
}) === 1
}
}
})
这意味着,如果用户目录中已存在应用程序,如果用户选择“继续移动”,则该函数将继续执行其默认行为,并且现有应用程序将被删除,并且活动应用程序将移动到其位置。
app.isSecureKeyboardEntryEnabled()
macOS
返回boolean
- 是否启用了“安全键盘输入”。
默认情况下,此 API 将返回false
。
app.setSecureKeyboardEntryEnabled(enabled)
macOS
enabled
boolean - 启用或禁用“安全键盘输入”
在您的应用程序中设置“安全键盘输入”是否启用。
通过使用此 API,可以防止诸如密码和其他敏感信息等重要信息被其他进程拦截。
有关更多详细信息,请参阅Apple 的文档。
注意:仅在需要时启用“安全键盘输入”,并在不再需要时禁用它。
app.setProxy(config)
config
ProxyConfig
返回Promise<void>
- 在代理设置过程完成后解析。
设置在没有关联的Session的情况下进行的网络请求的代理设置。目前,这将影响使用Net在实用程序进程中发出的请求以及运行时发出的内部请求(例如:地理位置查询)。
此方法只能在应用程序准备就绪后调用。
app.resolveProxy(url)
url
URL
返回Promise<string>
- 使用将用于尝试使用Net在实用程序进程中发出请求时使用的url
的代理信息解析。
属性
app.accessibilitySupportEnabled
macOS Windows
一个boolean
属性,如果启用了 Chrome 的辅助功能支持,则为true
,否则为false
。如果检测到使用辅助技术(例如屏幕阅读器),则此属性将为true
。手动将此属性设置为true
将启用 Chrome 的辅助功能支持,允许开发人员在应用程序设置中向用户公开辅助功能开关。
有关更多详细信息,请参阅Chromium 的辅助功能文档。默认情况下禁用。
此 API 必须在发出 ready
事件后调用。
注意:渲染辅助功能树会显著影响应用程序的性能。不应默认启用。
app.applicationMenu
一个Menu | null
属性,如果已设置则返回Menu
,否则返回null
。用户可以传递一个Menu来设置此属性。
app.badgeCount
Linux macOS
一个Integer
属性,返回当前应用程序的徽章计数。将计数设置为0
将隐藏徽章。
在 macOS 上,使用任何非零整数设置此值将显示在停靠栏图标上。在 Linux 上,此属性仅适用于 Unity 启动器。
注意:Unity 启动器需要 .desktop
文件才能工作。有关更多信息,请阅读 Unity 集成文档。
注意:在 macOS 上,您需要确保您的应用程序具有显示通知的权限,才能使此属性生效。
app.commandLine
只读
一个CommandLine
对象,允许您读取和操作 Chromium 使用的命令行参数。
app.dock
macOS 只读
一个Dock
| undefined
对象,允许您在 macOS 上对用户停靠栏中的应用程序图标执行操作。
app.isPackaged
只读
一个boolean
属性,如果应用程序已打包,则返回true
,否则返回false
。对于许多应用程序,此属性可用于区分开发和生产环境。
app.name
一个string
属性,指示当前应用程序的名称,即应用程序package.json
文件中的名称。
通常,package.json
的 name
字段根据 npm 模块规范是一个简短的小写名称。您通常还应该指定一个 productName
字段,它是应用程序的完整大写名称,Electron 将优先于 name
使用它。
app.userAgentFallback
一个string
,它是 Electron 将用作全局回退的用户代理字符串。
当在webContents
或session
级别未设置用户代理时,将使用此用户代理。它有助于确保您的整个应用程序具有相同的用户代理。在应用程序初始化的尽可能早的阶段将其设置为自定义值,以确保使用您覆盖的值。
app.runningUnderARM64Translation
只读 macOS Windows
一个boolean
,当为true
时表示应用程序当前正在 ARM64 转换器下运行(例如 macOS Rosetta 转换器环境或 Windows WOW)。
当用户错误地在 Rosetta 或 WOW 下运行 x64 版本时,您可以使用此属性提示他们下载应用程序的 arm64 版本。