electron应用提交到Windows应用商店全流程

在这篇文章中,我将会记录将一个electron应用提交到Windows应用商店的流程。
基本概况:

整体步骤

1. 建立你的electron应用

假设你已经拥有了一个可以正常运行、正常打包的的electron应用。
我的应用基于vue,使用的是electron-builder进行打包,并使用nsis来封装应用安装包。
正常情况下,当你打包完成后,你会在build文件夹下获得一个dist_electron的目录,这里面是未封装的exe程序。

2. 安装Windows SDK

前往以下网址,根据你的系统版本,下载并安装Windows SDK
Windows SDK
安装完成后,记录下你的SDK安装地址,稍后要用:C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64

3. 注册微软合作伙伴账号

根据官方说明,你需要前往Microsoft 合作伙伴中心,登录你的微软账号,然后根据引导注册一个开发者账号。
微软的开发者账号是绑定在微软账号上的,并且对个人和企业收取不同的费用,和苹果的年费会员制不同,这个费用是一次性的。个人19美元,公司99美元。

注意,在注册开发者账号时,省、市使用拼音首字母,不要用中文,否则很容易出现2201错误导致无法继续

注册完账号后,右上角进入账户设置并设置你的默认“付款配置文件和税务配置文件”。任何在微软商店的收入都将通过这个配置文件支付给你。
在设置税务配置文件时,很容易报错,务必注意当要求你输入常住地址时,下方选择“该地址不包含邮政信箱”,在下一页的邮寄地址中再录入一遍你的地址。

4. 注册你的应用

进入合作伙伴中心,打开控制台,选择应用和游戏


QQ截图20230819173043.jpg

点击“新产品”,选择“msix或pwa应用”


QQ截图20230819173206.jpg

在后续页面中设置你的应用名称并保存。其他信息你可以开始填了,比如隐私政策页面、定价、网站、联系方式等等,先把能填的都填写并保存。
QQ截图20230819190638.jpg

现在进入左侧菜单上的产品管理-产品标识,我们会看到包/标识/名称、包/标识/发行商、包/属性/发布者显示名称,把这三个记下来,待会要用


QQ截图20230819190801.jpg

5. 准备app图标

在项目下新建icons文件夹,放入icon256.ico作为应用的图标
在icons下新建appx目录,放入以下4个图标文件(文件名必须完全相同),稍后会用到

  • StoreLogo.png 商店的图标,512*512
  • Square150x150Logo.png 商店和开始菜单磁贴的图标,150*150
  • Square44x44Logo.png 任务栏和开始菜单列表中的图标,44*44
  • Wide310x150Logo.png 开始菜单长条形磁贴的图标 310*150

6. 打包生成.appx包

以下内容可以参考Electron-builder AppX

//vue.config.js
module.exports = {
  pluginOptions: {
    electronBuilder: {
      builderOptions: {
        productName: "Your product name",
        directories: {
          buildResources: "./icons",
        },
        win: {
          icon: "./icons/icon256.ico",
          target: ["nsis", "appx"],
        },
        appx: {
          identityName: "Your app identity name",
          publisher: "Your app publisher identity",
          publisherDisplayName: "Your app publisher name",
          applicationId: "Your app id",
          languages: ["zh-CN"],
        },
      },
    },
  },
};
  • buildResources: "./icons": 将这个文件夹下的文件打包进最终目标中
  • icon: "./icons/icon256.ico": 应用图标
  • target: [“nsis","appx"]: 使用nsis打包、生成appx包
  • identityName、publisher、publisherDisplayName这三个就是刚才从合作伙伴中心上面记下来的三个字段


    QQ截图20230819221827.jpg
  • applicationId: 你可以用你的应用名称或是appid,自定义的。最好是用builderOptions.appId
  • languages: 指定你的程序语言,如果这个为空,那么就默认是en-US,这也会显示在微软商店中

接下来执行

npm run electron:build

打包生成你的应用,你会在./build目录下看到你的appx安装包。

7. appx包的本地测试

此时双击安装appx包是无法安装的,会提示未签名无法使用,所以我们现在要创建一个证书来自签名并运行这个应用。
进入win11设置,隐私和安全性,开发者选项中,打开开发者模式


QQ截图20230824005122.jpg

然后回到项目文件夹下,新建code-signing文件夹
全局安装electron-builder

npm i electron-builder -g

到命令行中创建一个自签名用的证书。前往合作伙伴中心中的“包/标识/发行商”,找到那个CN=XXXXX,运行下面的命令(注意去掉“CN=”只要XXXXX):

electron-builder create-self-signed-cert -p XXXXX

弹出的框选择None


QQ截图20230824010050.jpg

一个证书就创建好了:


QQ截图20230824010124.jpg

将这个cert文件和刚才打包好的appx包都复制到code-signing下:


QQ截图20230824010338.jpg

确保系统中安装了Visual Studio,在开始菜单中找到Developer Command Prompt并打开:


QQ截图20230824010558.jpg

cd到code-sigining文件夹:


QQ截图20230824010753.jpg

运行

SignTool sign /fd SHA256 /a /f XXXXX.pfx unsignedapp.appx

即可完成签名


QQ截图20230824012909.jpg

这时候你双击你的appx就可以安装并进行本地测试了:


QQ截图20230824012936.jpg

如果还是提示签名问题,则按这个教程添加一下证书

8. appx包的兼容性问题

  1. child_process.spawn无法运行
    在生成appx后的应用中无法运行以下代码,会提示 "xxx.exe 缺少部署内容。请参阅 windows 审查文档"。
child_process.spawn(cmdline, [args], {
  shell: true
})

此时务必将shell改为false,或是使用child_process.execFile来执行第三方代码。

  1. 迷之userData
    当在electron中运行以下代码获取临时文件夹时,
app.getPath("userData")

正常情况下应该返回
C:\Users[username]\AppData\Roaming[appname]
而实际上AppX包的临时文件夹可能是
C:\Users[username]\AppData\Local\Packages[appid]\LocalCache\Roaming[appname]
因此当你把app.getPath("userData")当做参数传入一些第三方工具时,这个地址可能会获取不到。这可能是一个electron bug。

因此建议使用app.getPath("temp")文件夹存储临时文件

9. 如何在上传商店后测试

微软也有类似苹果Testflight的机制,可以在微软签名后进行内测。
前往商店新建一个提交,在定价和可用性那里选择免费,并在可见性一栏选择“特定受众”,新建或是选择一个用户组,这个用户组请务必包括你自己的邮箱。


QQ截图20230902115411.jpg

然后回到合作伙伴中心的“应用和游戏”首页,左侧选中“促销代码”并新建兑换码


2.jpg

这个版本提交后就会很快通过,你可以在刚才“定价和可用性”上面找到应用的链接,进入之后点击兑换代码,吧刚生产的兑换码输入进去,你就可以直接下载微软签名的版本进行测试了。

10.全部测试完成后你就可以新建一个公开的提交,然后上传到应用商店了。

一些注意事项:

  • 你至少需要准备两张海报,分别是1280 * 800和1080 * 1080用于应用商店的展示
  • 你需要一个网站来作为软件的官网和隐私政策的页面,你还需要一个邮箱作为技术支持邮箱
  • 在提交页面,商店会提示你应用有runFullTrust权限,需要提供原因,这时候在下面填写"这是一个electron应用"即可
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容