让我们假设我已经创建了两个MSIX包,它们是相互独立的。但是,我想把它们变成一个“相关集”;我希望其中一个是我的“主包”,另一个是与主包一起安装的“可选包”。我使用MakeAppx.exe来解压缩我的机器上的两个MSIX包,我正在查看文件系统中的两个包,特别是AppxManifest.xml文件。
我知道,对于可选的包,MainPackageDependency元素(来自XML命名空间http://schemas.microsoft.com/appx/manifest/uap/windows10/3)可以添加到AppxManifest.xml中的“依赖项”元素中。但是,我认为,为了使这两个包形成一个“相关集”,我还需要向主包的AppxManifest.xml添加一些内容。我不知道需要在其中添加什么。
这个问题的重点是我需要对主包做什么修改。一旦做出了这些修改,就需要重新打包MSIXes并对其进行签名。你可能认为我知道如何完成这些步骤是理所当然的。
MSIXes的目的是侧加载(而不是通过Microsoft分发),它们都包含可执行文件。
我试过的
我只试过修改包,这意味着是“可选的包”在相关的集合。这样做的结果是,当我尝试安装两个包时,主包成功安装,但在试图安装可选包时,会显示以下错误消息:
相关集无法更新,因为更新的集无效。相关集中的所有包必须同时更新。(0x80003d17)
以下错误出现在Windows错误日志中:
带有百年纪念内容OptionalPackageName_21.4.0.0_x86__0rk1t7bybtkaw的可选包不在相关集中,它必须位于由百年纪念主包MainPackageName_0rk1t7bybtkaw指定的相关集合中。
我不知道“百年纪念内容”或“百周年主要内容”是什么意思,在网上搜索也没有成功。
我尝试将一个PackageDependency元素添加到主包的Dependencies文件中的Dependencies元素中,将Optional属性(来自XML命名空间http://schemas.microsoft.com/appx/manifest/uap/windows10/6)设置为"true“。这产生了与上述相同的结果。据我理解,这不是正确的方法,因为PackageDependency元素用于声明所谓的“框架依赖”,这是一种不同类型的依赖关系。
我找到了一个Microsoft文档页面,该页面建议名为"AppxBundleManifest.xml“的文件可能是获取有关可选包的信息的工具。因此,我尝试将名为"AppxBundleManifest.xml“的文件添加到主包中,其内容以Visual在尝试处理从GitHub下载的示例项目时为我创建的同名文件的内容为模型。但是,该文件在运行时不会被MakeAppx.exe打包;它会打印以下消息:
MakeAppx :警告:忽略内存占用文件"AppxMetadata\AppxBundleManifest.xml“。
我不知道“占用文件”一词是什么意思,也不知道为什么要忽略该文件。
我尝试过浏览微软的AppxManifest.xml文件模式文档,但是我没有注意到任何有用的东西。
我尝试过安装付费软件产品"Advanced“的试用版,因为它自夸支持此功能,我想我可能可以从它生产的MSIXes中安装。但是,虽然我可以使用这个软件产品创建可选的包,但我不知道如何创建主包。供应商有在线文档,但据我所知,自编写该文档以来,他们已经更改了应用程序GUI的相关部分,而且我无法确定相关选项在我下载的版本中的位置。具体来说,此页似乎建议“构建”小部件(列在“包定义”类别下)应该包含一个“可选包”选项卡;实际上,那里没有“可选包”选项卡。
我已经尝试过使用微软在GitHub上提供的GitHub。然而,虽然我设法使它“构建”,但我没有成功地让它创建实际的MSIX文件。它确实创建了AppxManifest.xml文件,但是这些文件中没有任何明显是我自己的项目中缺少的文件元素。
为什么我不使用Visual来创建包?
我们希望使用WiX来创建MSIXes。不幸的是,WiX扩展包还不支持可选的包或相关集。我希望我们可以对WiX生成的WiX(例如,在AppxManifest.xml文件中编辑XML )进行一些调整,以满足我们的需要。
发布于 2021-10-17 16:36:22
这里出现的问题是,我错误地认为相关集可以以单独的包的形式创建,使用MakeAppx编译。实际上,您需要做的是分两个步骤使用MakeAppx:
[ExternalPackages]下的一个或多个可选包)如果您在代码之间阅读,可以从Microsoft文档中收集到这一点,但在我看到的任何地方都没有明确解释。
如果您在讨论此主题之前已经阅读过其他与MSIX相关的主题,那么很容易掩饰创建包的必要性,因为在其他文档中,捆绑包的动机是将其合并成一个单一单元、针对不同体系结构的包的多个版本。如果这与你无关,那么你可能会认为你可以无视它们。嗯,它们可以用于这个目的--但是如果您想要创建相关集,也可以(确实必须)使用它们。您可以有一个包,它只有一个必需的包,而且只能用于一个体系结构。
另一个问题是:要创建一个m660包,需要一个最低的Windows版本(我认为是10.0.18362.0)。
https://stackoverflow.com/questions/69585472
复制相似问题