9

我有一个 UWP 项目作为我的 Xamarin.Forms 解决方案的一部分。在本地运行 Windows 应用程序证书工具包时,它可以通过,没有任何问题。

将我的应用程序提交到商店时,认证过程失败并出现以下错误:

发现错误:

支持的 API 测试检测到以下错误:

此应用程序类型不支持 api-ms-win-core-file-l1-2-0.dll 中的 API FindFirstFileEx。PInvoke.Kernel32.dll 调用此 API。

未修复时的影响:

使用不属于 Windows 应用商店应用程序的 Windows SDK 的 API 违反了 Windows 应用商店认证要求。

怎么修:

查看错误消息以识别不属于适用于 Windows 应用商店应用的 Windows SDK 的 API。请注意,在调试配置中构建或未启用 .NET Native(如果适用)的应用程序可能无法通过此测试,因为这些环境可能会引入不受支持的 API。在发布配置中重新测试您的应用,并启用 .NET Native(如果适用)。

我已验证我的应用程序在发布模式下运行,并已验证我的 UWP 构建设置:

uwp

我尝试联系 Microsoft 的聊天支持,但被重定向到输入事件报告,然后我被重定向到仅在论坛上寻求帮助或支付高级技术支持,因此我无法获得有关是否这是否是有效的失败。

根据 FindFirstFileEx ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx ) 上找到的文档,它看起来受 Windows 桌面支持,应用商店和 Windows Phone。我的 UWP 应用提交支持桌面和移动家庭,似乎包含在此功能支持的客户端中,因此不清楚是什么导致失败。

关于从这里去哪里的任何想法?

4

4 回答 4

6

2017 年 8 月 14 日更新:这个问题现在应该在商店中得到解决。如果您遇到此问题,请尝试重新提交您的应用程序。


这是 WACK 扫描在 Store 中运行的方式以及它如何与 .NET Native 集成的问题。

对于某些背景,Windows 实际上没有命名的 API FindFirstFileEx- 它不存在。WACK 支持的 API 扫描的工作方式是查看您调用的所有 API 并验证以下其中一项是否为真:

  1. 它是您包中另一个 DLL 导出的 API
  2. 这是允许列表中明确提到的 API

在 的情况下kernel32.dll!FindFirstFileEx,WACK会发现kernel32.dll您的包中不存在它,因此它必须检查允许列表。允许列表没有提及FindFirstFileEx,因为它不存在。以下是确实存在的:

C:\Program Files (x86)\Windows Kits\10\App Certification Kit>findstr FindFirstFileEx SupportedAPIs-x64.xml
    <API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-1-0.dll"/>
    <API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-2-0.dll"/>
    <API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-2-1.dll"/>
    <API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-2-2.dll"/>
    <API Name="FindFirstFileExA" ModuleName="api-ms-win-downlevel-kernel32-l1-1-0.dll"/>
    <API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-1-0.dll"/>
    <API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-2-0.dll"/>
    <API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-2-1.dll"/>
    <API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-2-2.dll"/>
    <API Name="FindFirstFileExW" ModuleName="api-ms-win-downlevel-kernel32-l1-1-0.dll"/>
    <API Name="FindFirstFileExA" ModuleName="kernel32.dll"/>
    <API Name="FindFirstFileExW" ModuleName="kernel32.dll"/> 

请注意, 和 有很多条目FindFirstFileExAFindFirstFileExW它们是实际存在的 API。每当您的应用程序尝试调用FindFirstFileEx时,它实际上是在调用其中之一。

对于 C/C++ 开发者来说,预处理器实际上是根据FindFirstFileEx的存在替换为AorW版本。UNICODE

对于 .NET 开发人员,JIT 运行时(或者,在 .NET Native 的情况下,编译器)根据属性的具体细节(例如和属性的值)确定是否调用A或版本。WDllImportCharSetExactSpelling

这就是问题所在——目前,在编译器用正确的后缀版本替换非后缀版本之前,商店中的 WACK 正在.NET 程序集上运行。当您在开发机器上运行 WACK 时,它会在编译器进行替换后正确检查程序集,因此您看不到任何错误。

修复的第一部分(正在进行中)是将非后缀版本添加到允许列表中。修复的第二部分是确保 WACK 在后编译位上运行。

于 2017-07-25T05:40:49.053 回答
3

我有同样的问题。正如 Peter Torr 建议的那样,我打开了一个聊天会话(来自开发中心)。

这是摘要:

我:我的应用程序更新卡住了,因为您的认证系统存在错误。请参阅此处:由于不支持的 API FindFirstFileEx(WACK 在本地传递)导致 UWP 应用提交失败

支持:我们知道这个问题,并正在努力解决。我带来的不便表示歉意

我:好的,我知道你正在处理这个错误。但与此同时,你可以让我的应用程序通过,对吧?

支持:我们有一个临时的解决方法。如果您愿意,我可以为您获取这些信息吗?

……几分钟后……

支持:好的,我需要你做的是重新提交你的包,但在证书部分的注释中包含这个数字 XXXXXXXXXXX。如果这不起作用并且您的应用程序再次未能通过证书,请提交有关最近失败的证书报告的反馈并再次在此处插入数字。我已在您的帐户上注明以反映这一点

(实数替换为 XXXXXXXXXXX)


更新 1:就像@jkh 一样,自动认证再次失败,尽管有数字。所以我在认证反馈中发布了这个数字。

更新 2:不幸的是,“解决方案”没有帮助。我现在已经给聊天支持的人写了一封电子邮件(聊天后我得到了他的地址)。我不太相信这会有所帮助。但是让我们看看...

更新 3:我还提交了一个事件。(这可以在您通常开始聊天会话的地方完成,但使用下面的“提交事件”按钮。)

更新 4:事件提交的答案:

感谢您联系开发人员支持。我了解到您因 Window Store Policy 15.1 的 API 错误而未能通过认证。经过进一步审查后,我想让您知道这是一个已知问题,目前正在由工程师进行修复。应该很快就会推出修复程序,请您稍候。如果周一之前未实施修复,我可以进一步调查此问题,但由于这是一个全球性问题,我建议等待修复推出。当我听到与修复有关的消息时,我一定会联系并要求您再次尝试进行认证。

更新 5:我重新提交了更新,现在正在等待结果。

更新6:再次失败......

更新 7:事件提交的响应:这仍然是一个持续存在的问题,并且已将您的问题上报给我们的内部团队进行进一步调查,以尝试为您绕过此错误。一旦我收到更新,我一定会与您联系。

更新 8:最终,重新提交后,认证过程花了两天时间(!),但现在我的更新在商店里。哇,好斗啊……

于 2017-08-01T17:14:31.860 回答
1

我面临同样的问题。已提交认证反馈报告,正在等待微软的一些回复...

于 2017-07-24T21:46:27.767 回答
0

几周前在 Microsoft 开票后,我终于获得了对我的帐户的豁免,允许我通过自动认证。

不要重新提交。我被告知要重新提交并提供有关该解决方案的认证报告反馈。重新提交几次后,收到邮件回复说我的提交是手动通过的,但是每次重新提交时这些提交都被删除了,所以我的应用仍然没有推送通过。

一份包含您从 Microsoft 支持部门收到的编号(包含在认证说明和认证报告反馈中)的提交以及向 Microsoft 开具的票证最终将使您的提交通过。

于 2017-08-14T18:33:28.953 回答