一般来说,Microsoft claims appx包基本上应该是具有特殊内容的拉链,但实际上它们略有不同。如果我拿一个appx包并用7-Zip解压缩,我已经得到了一个" Headers-Error"提取。如果我再将文件打包到Zip并更改扩展名,则包无效。
我正在搜索有关格式的更多详细信息,但找不到任何内容。 appx打包相关问题的大多数答案以与MakeAppx.exe连接的命令结束。有没有人知道究竟是什么让appx与经典的zip文件不同,这可能会描述如何在不使用MakeAppx.exe的情况下创建这样的包?
目标是能够自己以编程方式创建appx包,而不依赖于MakeAppx。考虑到他们促进"建立标准"和#34;开放式包装协议"这么多,我猜差别很微妙。大多数其他OPC文件格式似乎是100%经典拉链。 Office文档,NuGet包,Visual Studio扩展等可以轻松地解压缩和重新打包,无需额外的逻辑。只有appx容器似乎包含一些特殊的头信息。
我的问题的背景是我是我们公司内使用的签名服务器的作者。它接受某些数据格式并创建它们的签名版本(例如' SignTool'服务)。一个功能是使用我们公司的签名覆盖现有签名(例如,用生产签名替换内部测试证书)。在签名时,Appx有一些限制,清单必须正确,必须使用正确的哈希算法等。微软提供source如何以编程方式进行签名,很好。但是,当涉及到可能的重新包装时,没有可用的API。我可以尝试简单地与exe接口,调用它,但这带来了许多我想要防止的缺点(错误处理,临时文件创建等)
答案 0 :(得分:1)
根据您提供的链接(Designing a simple and secure app package – APPX),似乎appx文件确实只是一个包含明确定义的文档集的zip文件。
要检查我是否下载了几个示例appx文件。当我在Linux机器上运行解压缩测试时,他们通过了。我没有7-Zip。
深入挖掘appx文件我发现它们在文件中的每个data descriptor部分后都包含8个额外的非标准填充字节。这些字节似乎不包含在zip文件规范(APPNOTE.TXT)或Open Office specification中。这可能是您使用7-zip看到的行为的原因。
然后,关键问题是填充字节是否是您无法使用7-Zip创建有效appx文件的根本原因。