跳到主要内容

Windows 应用商店指南

随着 Windows 10 的推出,传统的 win32 可执行文件有了一个新伙伴:通用 Windows 平台。新的 .appx 格式不仅支持许多强大的新 API,如 Cortana 或推送通知,而且通过 Windows 应用商店,还简化了安装和更新过程。

Microsoft 开发了一个工具,可以将 Electron 应用编译为 .appx,使开发者能够使用新应用模型中的一些优势。本指南解释了如何使用它 - 以及 Electron AppX 包的功能和限制是什么。

背景与要求

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

此外,exe 在 appx 模型内启动 - 这意味着它可以利用通用 Windows 平台提供的许多 API。为了获得更多功能,Electron 应用可以与一个随同 exe 启动的不可见的 UWP 后台任务配对 - 就像一个辅助程序,用于在后台运行任务、接收推送通知或与其他 UWP 应用通信。

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

  • 带有周年更新的 Windows 10(发布于 2016 年 8 月 2 日)
  • Windows 10 SDK,可在此下载
  • 至少 Node 4(运行 node -v 查看)

然后,安装 electron-windows-store CLI

npm install -g electron-windows-store

步骤 1:打包你的 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

步骤 2:运行 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 还可以自动将包安装到你的计算机上。

步骤 3:使用 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 Desktop App Converter”。这需要几分钟,但不用担心 - 只需执行一次。从这里下载 Desktop App Converter。你将收到两个文件:DesktopAppConverter.zipBaseImage-14316.wim

  1. 解压 DesktopAppConverter.zip。从提升的 PowerShell(以“管理员身份运行”打开)中,通过调用 Set-ExecutionPolicy bypass 确保你的系统执行策略允许我们运行我们想要运行的所有内容。
  2. 然后,运行 Desktop App Converter 的安装,传入 Windows 基础镜像的位置(下载为 BaseImage-14316.wim),通过调用 .\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14316.wim
  3. 如果运行上述命令提示你重启,请重新启动你的计算机并在成功重启后再次运行上述命令。

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