I’m sat in the eskybar at Sydney airport waiting for my Qantas flight from Sydney to Tokyo – we’ve arrived at the airport early expecting to check-in for the flight and drop bags, get through security and then sit in the Sydney Qantas Business Lounge – that’s not quite how things worked out – it turns out that you can’t check in for your flight until three hours before the flight leaves (seems a little odd)… So Loke and I are sat in the Eskybar drinking Diet Coke, jumping on WiFi and catching up with work…
So, anyhow, the point of this post was to discuss creating a custom Windows XP Embedded shell based on an MFC 8.0 application. I’m getting ready for a session I’m delivering in Tokyo in two days and needed to create a custom shell – the shell is an MFC dialog based application that has two buttons, “Start CMD” and “Shutdown” – the behavior of the buttons should be obvious – there was a problem though…
I used the following *excellent* MSDN article that describes how to create a custom Windows XP Embedded shell – I used Depends.exe to determine the baseline dependencies for the application – these are MFC80U.DLL, MSVCR80.DLL
So I added these dependencies to my XPE component – made all of the appropriate changes to make my application a Custom Shell on Windows XP Embedded and then built/booted the XPE image in a Virtual PC environment, and….. nothing.
So, next step was to build a command shell image and add the appropriate MFC application and apparent dependencies, I also added FileMon from SystemInternals
FileMon is a GREAT debugging tool for Windows XP Embedded images (as is RegMon) – In this case I was pretty sure that I was missing some files – turns out that I was missing the manifest files for the application, MFC and MSVCRT – here’s the list of files I needed for the application to boot as a custom shell correctly.
The MFC/CRT and MFC/CRT manifest files can be found here (assuming a default install of Visual Studio 2005) – C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86