Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows App Certification Kit fail Binary analyzer test and supported API test

I tried to package a windows app with release mode, but two tests failed:

1.Binary analyzer failed

Binary analyzer
•Error Found: The binary analyzer test detected the following errors:
  ◦File C:\Program Files\WindowsApps\***_1.0.0.0_x64__2qz35x103g***\clrcompression.dll has failed the AppContainerCheck check.
  ◦File C:\Program Files\WindowsApps\***.MStube_1.0.0.0_x64__2qz35x103g***\clrjit.dll has failed the AppContainerCheck check.  
•Impact if not fixed: If the app doesn’t use the available Windows protections, it can increase the vulnerability of the customer's computer to malware.
•How to fix: Apply the required linker options - SAFESEH, DYNAMICBASE, NXCOMPAT, and APPCONTAINER - when you link the app. See links below for more information:

2. Supported API test failed

•Error Found: The supported APIs test detected the following errors:
◦API RtlCaptureContext in api-ms-win-core-rtlsupport-l1-1-0.dll is not supported for this application type. clrcompression.dll calls this API.
◦API RtlVirtualUnwind in api-ms-win-core-rtlsupport-l1-1-0.dll is not supported for this application type. clrcompression.dll calls this API.
◦API _XcptFilter in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API __C_specific_handler in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API _amsg_exit in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API _initterm in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API free in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API malloc in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API memcpy in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.
◦API memset in msvcrt.dll is not supported for this application type. clrcompression.dll calls this API.

•Impact if not fixed:  Using an API that is not part of the Windows SDK for Windows Store apps violates the Windows Store certification requirements. 

•How to fix:  Review the error messages to identify the API that is not part of the Windows SDK for Windows Store apps. Please note, C++ apps that are built in a debug configuration will fail this test even if it only uses APIs from the Windows SDK for Windows Store apps. See the link below for more information: 
 Alternatives to Windows APIs in Windows Store apps. 

I have no ways to solve them...How to fix the two errors to make sure my application could be packaged correctly?

Thanks.

like image 628
Irmo Avatar asked Aug 16 '16 07:08

Irmo


3 Answers

The "clrjit.dll" should not exist in the output directory (e.g. "bin/x64/Release") or inside appx package for the Store submission.

You need to make sure that:

  1. you are submitting Release package, not Debug, and
  2. checkbox "Project Properties -> Build -> Compile with .NET Native tool chain" is checked (for Release configuration). This checkbox is saved as UseDotNetNativeToolchain=true in your .csproj file.

Note that "clrcompression.dll" by itself is fine, and will pass certification.

Hope this saves you a few agonizing hours. Downgrading NetCore is not a solution.

like image 185
user4698855 Avatar answered Nov 13 '22 13:11

user4698855


When I downgrade NetCore.UWP version from 5.2.2 to 5.1.0, the problems with clrcompression.dll disappeared.

like image 40
Irmo Avatar answered Nov 13 '22 12:11

Irmo


I also have Microsoft.NETCore.UniversalWindowsPlatform 6.1.9 and having the same issue.

Yes, .net native toolchain is checked. I try x86 and x64 and it doesn't work - my output directory always contains clrjit.dll and clrcompression.dll.

I don't have a reference to EntityFramework in any of my code so I'm not sure that's the problem I'm hitting.

The corefx link above has a link to a new issue in it - https://github.com/dotnet/corefx/issues/30594

Apparently Microsoft.NETCore.Portable.Compatibility is no longer needed with newer versions of Microsoft.NETCore.UniversalWindowsPlatform.

Removing Microsoft.NETCore.Portable.Compatibility has fixed my issue.

like image 1
Andy Gikling Avatar answered Nov 13 '22 13:11

Andy Gikling