跳转到主要内容

Windows Store 指南

Windows 10 引入了通用 Windows 平台(Universal Windows Platform),与传统的 win32 可执行文件相辅相成。新的 .appx 格式不仅支持 Cortana 或推送通知等一系列强大新 API,还通过 Windows 应用商店简化了应用的安装和更新过程。

Microsoft 开发了一个工具,可以将 Electron 应用编译成 .appx,使开发者能够利用新应用模型中的一些强大功能。本指南将介绍如何使用该工具,以及 Electron AppX 包的功能和局限性。

背景与要求

Windows 10 “周年更新”可以通过与虚拟化文件系统和注册表一起启动 win32 .exe 二进制文件来运行它们。这两种虚拟化环境都是通过在 Windows 容器中运行应用程序和安装程序在编译时创建的,从而使 Windows 能够准确识别安装过程中对操作系统进行的任何修改。将可执行文件与虚拟文件系统和虚拟注册表配对,可以实现 Windows 的一键安装和卸载。

此外,exe 文件在 appx 模型内启动,这意味着它可以利用许多通用 Windows 平台可用的 API。为了获得更多功能,Electron 应用可以与一个不可见的 UWP 后台任务配对,该任务与 exe 一起启动——可以将其视为一个“副驾驶”,用于在后台运行任务、接收推送通知或与其他 UWP 应用程序进行通信。

要编译任何现有的 Electron 应用,请确保满足以下要求:

  • Windows 10 且已安装周年更新(发布于 2016 年 8 月 2 日)
  • Windows 10 SDK,可在此处下载
  • 至少 Node 4(要检查,请运行 node -v

然后,安装 electron-windows-store CLI

npm install -g electron-windows-store

第一步:打包你的 Electron 应用程序

使用 @electron/packager(或类似工具)打包应用程序。请确保移除最终应用程序中不需要的 node_modules,因为任何不实际需要的模块都会增加应用程序的大小。

输出应大致如下所示

├── Ghost.exe
├── LICENSE
├── content_resources_200_percent.pak
├── content_shell.pak
├── d3dcompiler_47.dll
├── ffmpeg.dll
├── icudtl.dat
├── libEGL.dll
├── libGLESv2.dll
├── locales
│   ├── am.pak
│   ├── ar.pak
│   ├── [...]
├── node.dll
├── resources
│   └── app.asar
├── v8_context_snapshot.bin
├── squirrel.exe
└── ui_resources_200_percent.pak

第二步:运行 electron-windows-store

以管理员身份(“以管理员身份运行”)打开 PowerShell,并使用必需的参数运行 electron-windows-store,指定输入和输出目录、应用程序的名称和版本,并确认应“扁平化” node_modules

electron-windows-store `
--input-directory C:\myelectronapp `
--output-directory C:\output\myelectronapp `
--package-version 1.0.0.0 `
--package-name myelectronapp

执行后,该工具将开始工作:它接收你的 Electron 应用作为输入,并扁平化 node_modules。然后,它将你的应用程序打包为 app.zip。该工具使用安装程序和 Windows 容器来创建“解压”后的 AppX 包——包括 Windows 应用程序清单(AppXManifest.xml)以及输出文件夹内的虚拟文件系统和虚拟注册表。

一旦创建了解压后的 AppX 文件,该工具将使用 Windows 应用打包器(MakeAppx.exe)从磁盘上的这些文件创建单个文件 AppX 包。最后,该工具还可以用来在你的计算机上创建一个受信任的证书来签名新的 AppX 包。有了签名后的 AppX 包,CLI 还可以自动将该包安装在你的机器上。

第三步:使用 AppX 包

为了运行你的包,用户需要安装 Windows 10 并已更新到所谓的“周年更新”——有关如何更新 Windows 的详细信息,请参阅 此处

与传统的 UWP 应用不同,打包的应用目前需要经过手动验证过程,你可以在 此处 申请。在此期间,所有用户都可以通过双击安装你的包,因此如果你正在寻找更简单的安装方法,提交到应用商店可能不是必需的。在托管环境中(通常是企业),可以使用 Add-AppxPackage PowerShell Cmdlet 以自动化方式进行安装

另一个重要的限制是,编译后的 AppX 包仍然包含一个 win32 可执行文件——因此它无法在 Xbox、HoloLens 或手机上运行。

可选:使用 BackgroundTask 添加 UWP 功能

你可以将 Electron 应用与一个不可见的 UWP 后台任务配对,该任务可以充分利用 Windows 10 的功能——例如推送通知、Cortana 集成或动态磁贴。

要查看一个使用后台任务发送 Toast 通知和动态磁贴的 Electron 应用示例,请 查看 Microsoft 提供的示例

可选:使用容器虚拟化进行转换

为了生成 AppX 包,electron-windows-store CLI 使用了一个模板,该模板应适用于大多数 Electron 应用。但是,如果你使用的是自定义安装程序,或者在生成的包时遇到任何问题,你可以尝试使用 Windows 容器编译来创建包——在该模式下,CLI 将在空的 Windows 容器中安装和运行你的应用程序,以确定你的应用程序究竟对操作系统进行了哪些修改。

在首次运行 CLI 之前,你需要设置“Windows 桌面应用转换器”(Windows Desktop App Converter)。这需要几分钟时间,但不用担心——你只需要执行一次。从 此处 下载桌面应用转换器。你将收到两个文件:DesktopAppConverter.zipBaseImage-14316.wim

  1. 解压 DesktopAppConverter.zip。以管理员身份(“以管理员身份运行”)打开 PowerShell,并确保你的系统执行策略允许我们运行所有打算运行的脚本,方法是调用 Set-ExecutionPolicy bypass
  2. 然后,通过调用 .\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14316.wim 来运行桌面应用转换器的安装,并传入 Windows 基础映像(下载为 BaseImage-14316.wim)的位置。
  3. 如果运行上述命令提示你重启,请重新启动你的计算机,并在成功重启后再次运行上述命令。

安装成功后,你就可以继续编译你的 Electron 应用了。