由于不支持的API FindFirstFileEx(WACK在本地传递)导致UWP应用程序提交失败

时间:2017-07-24 19:16:57

标签: xamarin uwp xamarin.forms windows-store-apps wack

我有一个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构建设置:

uwp

我尝试联系微软的聊天支持,但被重定向到事件报告,然后我被重定向到只是在论坛上寻求帮助或支付高级技术支持,所以我没有能够获得有关这是否是有效失败的更多信息。

根据FindFirstFileEx(https://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx)上的文档,Windows桌面,商店应用和Windows Phone支持它。我的UWP应用程序被提交以支持桌面和移动系列,这些系列似乎包含在此功能的受支持客户端中,因此不清楚导致失败的原因。

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

4 个答案:

答案 0 :(得分:6)

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

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

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

  1. 它是由您的包中的另一个DLL导出的API
  2. 它是允许列表中明确提到的API
  3. 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 ++开发人员,预处理器实际上用FindFirstFileExA版本based on the existence of the UNICODE macro替换W

    对于.NET开发人员,JIT运行时(或者,在.NET Native&#39的情况下,编译器)根据具体情况确定是否调用AW版本。 DllImport attribute,例如CharSetExactSpelling属性的值。

    这就是问题所在 - 目前,商店中的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一起打开的故障单最终将通过您的提交。