【发布时间】:2021-12-03 16:51:55
【问题描述】:
让我们假设我创建了两个 MSIX 包并且它们彼此独立。但是,我想让它们成为一个“相关集”;我希望其中一个成为我的“主包”,另一个成为与主包一起安装的“可选包”。我使用 MakeAppx.exe 解压了我机器上的两个 MSIX 包,我正在查看文件系统中的两个包,特别是 AppxManifest.xml 文件。
我知道对于可选包,MainPackageDependency 元素(来自 XML 命名空间 http://schemas.microsoft.com/appx/manifest/uap/windows10/3)可能会添加到 AppxManifest.xml 中的“Dependencies”元素中。但是,我相信为了让这两个包形成一个“相关集”,我还需要在主包的AppxManifest.xml中添加一些东西。我不知道我需要在那里添加什么。
这个问题的重点是我需要对主包进行哪些更改。完成这些更改后,仍需要重新打包 MSIX 并对其进行签名。你可能想当然地认为我知道如何完成这些步骤。
MSIX 旨在侧面加载(不通过 Microsoft Store 分发),它们都包含可执行文件。
我尝试过的
我已尝试仅修改相关集中应作为“可选包”的包。这样做的结果是,当我尝试安装这两个包时,主包安装成功,但在尝试安装可选包时,显示以下错误消息:
无法更新相关集,因为更新的集无效。相关集中的所有包必须同时更新。 (0x80003d17)
Windows 错误日志中出现以下错误:
百年纪念内容OptionalPackageName_21.4.0.0_x86__0rk1t7bybtkaw的可选包不在相关集中,需要在百年纪念主包MainPackageName_0rk1t7bybtkaw指定的相关集中。
我不知道“百年内容”或“百年主包”这两个词是什么意思,在线搜索也没有成功。
我尝试将PackageDependency 元素添加到主包的AppxManifest.xml 文件中的Dependencies 元素,并将Optional 属性(来自XML 命名空间http://schemas.microsoft.com/appx/manifest/uap/windows10/6)设置为“true”。这产生了与上述相同的结果。据我了解,这不是正确的方法,因为PackageDependency 元素用于声明所谓的“框架依赖项”,这是一种不同的依赖项。
我发现了一个 Microsoft 文档页面,该页面建议名为“AppxBundleManifest.xml”的文件可能是有关可选包信息的载体。因此,我尝试将名为“AppxBundleManifest.xml”的文件添加到主包中,其内容模仿了 Visual Studio 在尝试使用从 GitHub 下载的示例项目时为我创建的同名文件。但是,MakeAppx.exe 在运行时不会打包此文件;它打印以下消息:
MakeAppx:警告:忽略足迹文件“AppxMetadata\AppxBundleManifest.xml”。
我不知道术语“足迹文件”是什么意思,也不知道为什么该文件被忽略。
我尝试浏览Microsoft's documentation of the AppxManifest.xml file schema,但我没有发现那里有任何帮助。
我已尝试安装付费软件产品“Advanced Installer”的试用版,因为它支持此功能,而且我认为我可以从它产生的 MSIXes 中使用。然而,虽然我可以使用这个软件产品创建我的可选包,但我不知道如何创建主包。供应商有在线文档,但据我所知,自编写该文档以来,他们已经更改了应用程序 GUI 的相关部分,我无法弄清楚相关选项在我下载的版本中的位置。具体来说,this page 似乎暗示“构建”小部件(列在“包定义”类别下)应该包含一个“可选包”选项卡;实际上,那里没有“可选包”选项卡。
我尝试使用 Microsoft 在 GitHub 上提供的 a sample project。但是,虽然我设法让它“构建”,但我没有成功让它创建实际的 MSIX 文件。它确实创建了 AppxManifest.xml 文件,但这些文件中没有任何内容显然是我自己项目中文件中缺少的元素。
为什么我不使用 Visual Studio 创建包?
我们想使用 WiX 来创建 MSIX。不幸的是,WiX 扩展包还不支持可选包或相关集。我希望我们可以对 WiX 生成的 MSIX 进行一些调整(例如,在 AppxManifest.xml 文件中编辑 XML),从而满足我们的需求。
【问题讨论】:
标签: installation msix