electron APPXBUNDLE中的程序包APPX

vlju58qv  于 2022-12-16  发布在  Electron
关注(0)|答案(4)|浏览(166)

我目前在Windows应用商店中提交了一个UWP应用,现在我想发布一个更新。此更新基于Electron,所以它不再是UWP应用。
我只是想将电子应用程序提交到Windows应用商店,但我收到此错误消息:A previous submission for this app was released with a Windows 10 .msixbundle or .appxbundle. Subsequent submissions must continue to contain a Windows 10 .msixbundle or .appxbundle.
Electron应用程序是用electron-builder打包的,生成的文件是appx文件。之前我用Visual Studio打包应用程序,生成的文件是appxbundle
根据此错误消息,我必须提交.msixbundle.appxbundle文件。我是否可以只创建包含Electron .appx文件的.appxbundle,然后将应用提交到Windows应用商店?
谢谢

vfhzx4xs

vfhzx4xs1#

是的,您可以,这里有一篇来自MSFT的分步文章,介绍了如何为现有的msix/appx包生成MSIX包。

fae0ux8s

fae0ux8s2#

这是我自己问题的答案。
正如我已经提到的,你必须坚持你最初向微软应用商店提交应用程序的捆绑包格式,所以在我的例子中是.appxbundle
我使用的是electron-builder,它会生成一个.appx,然后我使用afterAllArtifactBuildHook将其捆绑到.appxbundle
这是我的electronic project的build/hooks文件夹中的afterAllArtifactBuildHook.js,它自动使用electron-builder中已经缓存的winCodeSign工具,因此它确保了所有内容的匹配。

注意:这适用于macOS和功能性Parallels桌面安装,Windows 10已设置为构建.appx文件

var path = require("path"),
    fs = require("fs"),
    glob = require("glob"),
    childProcess = require('child_process');

exports.default = function(buildResult) {
    buildResult.artifactPaths.forEach(function(appxPath) {
        if (appxPath.endsWith(".appx")) {
            convertAppx2AppxBundle(appxPath);
        }
    });
};

/**
 * Converts a Unix Path to a Windows conforming path by replacing any "/" with "\"
 * @return {string}
 */
String.prototype.windowsify = function windowsify() {
    return this.replace(/\//g, "\\");
}

/**
 * Converts the given appx to an appxbundle used for Windows Store submission
 * @note This function utalizes the parallels desktop tool "prlctl" to execute windows commands via macOS
 * @param appxPath
 */
function convertAppx2AppxBundle(appxPath) {
    try {
        console.log("Converting Appx to Appxbundle...")
        // We'll use electron-builder's winCodeSign tools which are conveniently already available in the following dir
        var electronBuilderDir = path.join(process.env.HOME, "Library/Caches/electron-builder"), // Don't use "~" it will just not work, trust me...
            // Will use the first matching windowsCodeSigning path as we may have multiple versions installed
            makeAppX = glob.sync(path.join(electronBuilderDir, "winCodeSign", "winCodeSign-*", "windows-10", "x64", "makeappx.exe"))[0],
            appxBundleMapFile = // This file is required by the makeappx.exe to generate the appxbundle
                '[Files]\n' +
                '"\\\\Mac\\AllFiles' + appxPath.replace(/\//g, "\\") + '"\t\t"Loxone.appx"';

        // Save the generated AppxBundle.map file to the filesystem to make it available for the Windows VM
        fs.writeFileSync(path.join(__dirname, "..", "AppxBundle.map"), appxBundleMapFile, { flag: "w" });

        var prlctlArgs = [
            'exec',
            '"Windows 10"', // the name of the specific Windows VM
            '--current-user', // We want to execute the following command with the current user
            // From this point on its the default Windows CLI command for converting an .appx to an .apppxbundle
            // Its important to know that these parts must conform to the Windows style, hence the windowsify function
            // We also need to use double quotation for the network shares due to how childProcess.execSync works...
            '"\\\\\\Mac\\AllFiles' + makeAppX.windowsify() + '"',
            'bundle',
            '/f',
            '"\\\\\\Mac\\AllFiles' + (__dirname.replace("/hooks", "") + "/AppxBundle.map").windowsify() + '"',
            '/p',
            '"\\\\\\Mac\\AllFiles' + appxPath.windowsify() + 'bundle"',
            '/o'
        ];
        // Now just execute the command to convert the appx to an appxbundle
        childProcess.execSync('prlctl ' + prlctlArgs.join(" "), { stdio: 'inherit' });
        console.log("Done converting Appx to Appxbundle");
    } catch (e) {
        console.warn("Couldn't convert appx two appxbundle!");
        console.error(e);
    }
}
9udxz4iz

9udxz4iz3#

我用来更新现有appbundle的步骤,
1.生成您的APPX文件
1.创建bundle.txt文件
[文件]“.\release_1.0.0.appx”“版本_1.0.0.appx”
1.如果您安装了VS 2022,则打开x64_x86 Cross Tools命令提示符
1.转到APPX文件所在的目录。
1.执行命令,
制作应用程序捆绑包/v /o /bv 1.0.0.0版本_1.0.0.appx捆绑包
1.然后,您应该能够上传到developer.windows.com Jmeter 板。

uqcuzwp8

uqcuzwp84#

电子应用程序可以为Windows应用商店编译。微软开发了a tool that compiles Electron apps as .appx packages,使开发人员能够使用新应用程序模型中的一些好东西。新的.appx不仅支持许多新的强大API,如Cortana或推送通知,而且通过Windows应用商店,还简化了安装和更新。您可以参考电子文档:Windows应用商店指南和Microsoft Blog Compiling Electron Apps for the Windows Store了解详细的步骤和要求。

相关问题