CE 5.0 application Compatibility on CE 6.0

Windows Embedded CE 6.0 introduces a new kernel architecture to support kernel mode drivers (user mode drivers are still supported through a user mode driver manager called udevice.exe, interestingly, with CE 6.0 you can have multiple instances of udevice.exe, each hosting a single user mode driver – Juggs talks about the new driver architecture in his MSDN Channel9 interview).

So what does the new architecture do for application compatibility for existing CE 5.0 based applications ? – the majority of “Well Behaved” applications should just run in their unmodified binary form – there are two types of application supported on Windows CE, native, and managed – native applications are assembled, compiled, and linked into a binary application that runs on the processor it’s been targeted at (ARM, MIPS, SH4, x86), a managed application is built against the .NET Compact Framework and is written either in C# or VB.

Managed applications are already abstracted from the underlying operating system by the Compact Framework and therefore should just run (unless the application is using platform invoke to call any of the deprecated (no longer supported) APIs) – native applications may not work if they are using any memory/API “tricks”, there are a number of deprecated APIs, these include SetKMode, SetProcPermissions etc… – so how do you determine whether an application will run on CE 6.0 or not ?

The good news is that we’re introducing a new command line tool called CeAppCompat which can be used to examine a single application/DLL binary or a complete folder full of applications/DLLs and produces an HTML report listing which binaries might have a problem.

CeAppCompat takes two command line parameters – the command line looks like: CeAppCompat -i \FolderPath -o Foo

Where Foo will be the name of the HTML report Foo.html

The CeAppCompat tool simply examines the import tables for each of the binaries and maps these back to the APIs exposed on the operating system (you can examine the import tables on a binary using the command line tool DumpBin – like so, Dumpbin /Imports MyApp.exe) or you can use the UI based application Depends.exe to do the same thing.

– Mike

Comments (6)

  1. Mike Hudgell says:

    So will AppCompat not pick up dynamically loaded APIs?

    Granted, if your dynamically loading them you should check for errors anyway…

  2. mikehall says:

    CeAppCompat uses Dumpbin to get the import table from the binary, the import table lists the statically linked DLLs/Functions.

    If you are dynamically linking then you should check the external DLLs to make sure they also are compatibile with CE 6.0.

    – Mike

  3. Tom says:

    If the CF 2.0 app is using OpenNetCF framework will it check all of the pInvoke calls being made by the app?  THX

  4. mikehall says:

    CEAppCompat is designed to examine the import table of native applications/dlls – managed applications should be checked at the source level.

    – Mike

  5. Laphroaig says:

    When can we download an CE 6.0 based emulator image?

    Will it give a StandardSDK_600?

    Are WCE200 (HPC 2.0) binary files still supported?

    Wouldn’t it be better to implement deprecated functions as dummy instead of remove them?

    Are CEDB api functions still functional?

  6. Mike Hall covered this in a recent Blog post here . Given that Windows Embedded CE 6.0 introduces a third-generation