我有一个UWP项目作为我的Xamarin.Forms解决方案的一部分。在本地运行Windows App Cert Kit时,它会毫无问题地通过。
将我的应用程序提交到商店时,它未通过认证过程,并出现以下错误:
发现错误:
支持的API测试检测到以下错误:
此应用程序类型不支持api-ms-win-core-file-l1-2-0.dll中的API FindFirstFileEx。 PInvoke.Kernel32.dll调用此API。
影响如果不修复:
使用不属于Windows SDK for Windows应用商店应用的API会违反Windows应用商店认证要求。
如何解决:
查看错误消息,以识别不属于Windows SDK for Windows Store应用程序的API。请注意,在调试配置中构建的应用程序或未启用.NET Native的应用程序(如果适用)可能会使此测试失败,因为这些环境可能会引入不受支持的API。在发布配置中重新测试您的应用程序,并在适用的情况下启用.NET Native。
我已经确认我的应用在发布模式下运行,并验证了我的UWP构建设置:
我尝试联系微软的聊天支持,但被重定向到事件报告,然后我被重定向到只是在论坛上寻求帮助或支付高级技术支持,所以我没有能够获得有关这是否是有效失败的更多信息。
根据FindFirstFileEx(https://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx)上的文档,Windows桌面,商店应用和Windows Phone支持它。我的UWP应用程序被提交以支持桌面和移动系列,这些系列似乎包含在此功能的受支持客户端中,因此不清楚导致失败的原因。
关于从哪里去的任何想法?
答案 0 :(得分:6)
2017年8月14日更新:现在应该在商店中解决此问题。如果您遇到此问题,请尝试重新提交您的应用。
这是WACK扫描在Store中运行的方式,以及它如何与.NET Native集成。
对于某些背景,Windows实际上并没有名为FindFirstFileEx
的API - 它不存在。 WACK支持的API扫描的工作方式是查看您调用的所有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"/>
请注意,FindFirstFileExA
和FindFirstFileExW
有很多条目,它们是实际存在的API。每当您的应用尝试拨打FindFirstFileEx
时,它实际上会调用其中一个。
对于C / C ++开发人员,预处理器实际上用FindFirstFileEx
或A
版本based on the existence of the UNICODE
macro替换W
。
对于.NET开发人员,JIT运行时(或者,在.NET Native&#39的情况下,编译器)根据具体情况确定是否调用A
或W
版本。 DllImport
attribute,例如CharSet
和ExactSpelling
属性的值。
这就是问题所在 - 目前,商店中的WACK正在运行.NET程序集之前编译器已使用正确的后缀版本替换了非后缀版本。当您在开发机器上运行WACK时,它会在编译器进行替换后正确检查 之后的程序集,因此您看不到错误。
修复的第一部分(正在进行中)是将非后缀版本添加到allow-list。修复的第二部分是确保WACK在后编译位上运行。
答案 1 :(得分:3)
我遇到了同样的问题。我打开了一个聊天会议(来自开发中心),正如Peter Torr建议的那样。
以下是摘要:
我:我的应用更新因您的认证系统中存在错误而停滞不前。见这里:UWP app submission failure due to unsupported API FindFirstFileEx (WACK passes locally)
支持:我们已经意识到这个问题,正在努力寻求解决方案。对于给您带来的不便,我深表歉意
我:好的,我知道您正在处理这个错误。但与此同时,你可以让我的应用程序通过,对吧?
支持:我们有一个临时解决方法。如果你愿意,我可以为你得到这些信息吗?
......几分钟后......
支持:好的,所以我需要你重新提交你的包裹,但在证书注释中包含这个号码XXXXXXXXXXX。如果这不起作用并且您的应用程序再次失败,请提交有关最新失败的证书报告的反馈,然后再次插入该号码。我已经注明了您的帐户以反映这一点
(实数由XXXXXXXXXXX取代)
更新1 :就像@jkh一样,尽管有这个号码,自动认证仍然失败了。所以我在认证反馈中公布了这个号码。
更新2 :不幸的是,“解决方案”没有帮助。我现在已经从聊天支持中写了一封电子邮件(我在聊天后得到了他的地址)。我不太相信这会有所帮助。但是,让我们看看......
更新3 :我还提交了一个事件。 (这可以在您通常开始聊天会话的地方完成,但使用下面的“提交事件”按钮。)
更新4 :事件提交回答:
感谢您与开发者支持小组联系。据我所知,由于API错误导致Window Store Policy 15.1认证失败。经过进一步审核后,我想告诉您这是一个已知问题,目前正在由工程师进行修复。应该很快就会推出一个修复程序并请你等一下。如果修复程序没有在周一实现,我可以进一步研究这个问题,但由于这是一个全局问题,我建议等待修复程序推出。当我听到与修复有关的内容时,我一定会联系并请求您再次尝试进行认证。
更新5 :我重新提交了更新,现在我正在等待结果。
更新6 :再次失败......
更新7 :事件提交的响应:这仍然是一个持续的问题,并已将您的问题上报给我们的内部团队进行进一步调查,以尝试绕过此错误。收到更新后,我一定会联系到。
更新8 :最终,重新提交后,认证过程需要两天时间(!),但现在我的更新已在商店中。哇,真是个吵架......
答案 2 :(得分:1)
我面临同样的问题。已提交认证反馈报告,等待微软的一些回复...
答案 3 :(得分:0)
几周前与微软开了一张票之后,我终于获得了对我帐户的弃权,这让我可以通过自动化认证。
请勿重新开始。我被告知要重新提交并提供有关该解决方案的认证报告反馈。重新提交几次后,我收到了电子邮件回复,表示我的提交已经手动通过,但每次重新提交时都会删除这些提交内容,因此我的应用仍然没有被推迟。
一份提交,其中包含您从Microsoft认证备忘录和认证报告反馈中获得的Microsoft支持,并且与Microsoft一起打开的故障单最终将通过您的提交。