13

我在尝试将 Windows Phone 8.1 的任何类型的 HTML 应用程序部署为公司应用程序时遇到问题。我开发的应用程序正在使用 Visual Studio Apache Cordova Apps 项目,但我还测试了手动创建.appx的空白应用程序(通用 Windows 8.1)和空白应用程序(Windows Phone)......最后两个似乎有效是相同的项目类型,通用的只是在一个带有 Windows 8.1 项目的解决方案中。

当我尝试安装它时,我总是收到下面详述的错误消息(从电子邮件、网络和手机的本地文件夹中尝试过各种方式。

使用相同的工作流程安装 C# Windows Phone 8.1 Hub App 项目可以完美运行。


错误信息

无法安装公司应用

此公司应用程序存在问题。联系贵公司的支持人员寻求帮助


开发环境

  • Windows 8.1 企业版
  • 具有跨平台移动开发的 Visual Studio Enterprise 2015 > HTML/JavaScript (Apache Cordova) 更新 1
  • 具有适用于 Windows® Phone Private Enterprise 的赛门铁克代码签名证书的 Windows Enterprise Developer 帐户
  • 开发人员解锁诺基亚 Lumia 635 或公司 MDM 注册诺基亚 Lumia 635

工作项目类型

  • Hub 应用程序 (Windows Phone) [模板 > Visual C# > Windows > Windows 8 > Windows Phone]
  • 大概是任何其他 C# 项目类型(未测试)

错误的项目类型

  • 空白应用程序 (Apache Cordova) [模板 > 其他语言 > TypeScript > Apache Cordova 应用程序]
  • 空白应用程序(通用 Windows 8.1)[模板 > 其他语言 > JavaScript > Windows > Windows 8 > 通用]
  • 空白应用程序 (Windows Phone) [模板 > 其他语言 > JavaScript > Windows > Windows 8 > Windows Phone]
  • 使用 Microsoft 的 AppxManifest.xml 基本模板和 MakePri.exe、MakeApp.exe 手动创建了一个包含单个 HTML 文件的 appx

工作流程

  • 从 Visual Studio 创建相关的项目类型
  • 更改 Phone.appxmanifest 文件以使发布者与赛门铁克证书相匹配Subject并让我们的 PhonePublisherID
  • 右键单击项目,“商店 > 创建应用程序包...”
  • 通过向导选择“否”到 Windows 应用商店,从不捆绑和构建发布版本
  • 使用 SignTool.exe 或 BuildMDILAPPX.ps1 使用我们的证书对包进行签名
  • 如果尚未在手机上安装 AET.aetx 文件
  • 在手机上安装应用程序(从电子邮件、网络或本地文件夹)
  • 错误
4

1 回答 1

5

答案,当它来的时候,很简单,如果不是很明显的话。微软说过

在 Windows Phone 8.1 中有一个已知问题,要求企业应用程序包具有此 [CodeIntegrity.cat] 文件。

实际上,在“Windows Store 应用程序的故障排除打包、部署和查询”部分的页面中有一个小线索APPX_E_MISSING_REQUIRED_FILE(尽管在部署已签名的公司应用程序时您实际上并没有收到此错误代码,因此它并不是真正的线索这个案例)。它指出 -

该包无效,因为它缺少清单或块映射,或者存在代码完整性文件但缺少签名文件。

确保软件包没有缺少以下一个或多个必需文件:

\AppxManifest.xml

\AppxBlockMap.xml

如果包包含 \AppxMetadata\CodeIntegrity.cat,它还必须包含 \AppxSignature.p7x。

它没有说的是(至少对我而言)反过来也是如此

如果您正在签署插入AppxSignature.p7x文件的公司应用程序,那么您的包中还必须有一个\AppxMetadata\CodeIntegrity.cat文件.appx。仅当您dll的项目中有 s 时才会生成此文件,并且在 Windows Phone 8.1 上,可以非常轻松地编写混合应用程序,而无需任何dlls。

所以我创建了一个空白Class Library (Portable for Universal Windows 8.1)项目,构建了一个空项目dll并将其插入到通过构建 Cordova 应用程序创建的解决方案的根目录中。我还删除了对 WinJS 2.1 的依赖项,因为这可以阻止应用程序作为公司应用程序安装,并且 WinJS 文件已经在我的项目中(作为公司应用程序安装时无法将依赖项推送到设备,如果它们是从 Windows 应用商店或 Visual Studio 部署的)。

选择“Store > Create App Packages...”现在会在根目录中生成一个.appx文件,现在当我通过脚本运行它时,会为包创建一个。dllBuildMDILAPPX.ps1\AppxMetadata\CodeIntegrity.cat

安装此软件包现在可以正常工作并成功安装。

于 2015-08-25T13:06:33.297 回答