Windows CE is a componentized (is that a real word?) operating system, but you already knew that, right. Being componentized (there's that word again) is a good thing, it means you only put the technologies you need into the operating system (the same is also true of Windows XP Embedded) – only including the features you need reduces the size of the operating system which in turn can reduce the amount of boot media for the device.

Windows CE ships with approximately 600 operating system components which are exposed through the Windows CE catalog (if you are an IDE user) or through command line environment variables (if you prefer to work at the command line).

Windows CE gives a number of starting point platform configurations which can jumpstart your embedded design, these really are starting points for a design, you can further customize the platform by either removing features you don’t need, or by adding additional features from the catalog.

 

But… here’s the thing, let’s assume that you’ve been working on a project for a while, and the design is based on the “Internet Appliance” platform configuration – you may have added or removed a number of catalog items, there’s nothing in Platform Builder to show you the delta from the original platform, or to compare two platform workspaces – these are of course two completely separate issues which we will explore one at a time.


Let’s first take a look at comparing two platforms.

 

I’ve created a platform called “MyPlatform”, this is based on the Internet Appliance configuration – using Platform Builder I can open a Build Command Window (Build OS | Open Release Directory) and get a listing of all of the currently “set” SYSGEN variables using the command “set sysgen” – here’s how my sysgen list looks for the MyPlatform workspace.

 

C:\WINCE500\PBWorkspaces\MyPlatform\RelDir\Emulator_x86_Debug>set sysgen

SYSGEN_AUDIO=1

SYSGEN_AUTH=1

SYSGEN_AUTH_NTLM=1

SYSGEN_AUTH_SCHANNEL=1

SYSGEN_CERTS=1

SYSGEN_CMD=1

SYSGEN_CONNMC=1

SYSGEN_CONSOLE=1

SYSGEN_CRYPTO=1

SYSGEN_CURSOR=1

SYSGEN_DOTNET=1

SYSGEN_ETHERNET=1

SYSGEN_FSADVERTISE=1

SYSGEN_HELP=1

SYSGEN_IABASE=1

SYSGEN_IESAMPLE=1

SYSGEN_IE_IMGUTIL=1

SYSGEN_IE_JSCRIPT=1

SYSGEN_IE_PNGFILT=1

SYSGEN_INETCPL=1

SYSGEN_MLANG=1

SYSGEN_MODEM=1

SYSGEN_MSHTML=1

SYSGEN_NETUTILS=1

SYSGEN_NOTIFY=1

SYSGEN_PM=1

SYSGEN_PPP=1

SYSGEN_REDIR=1

SYSGEN_SHDOCVW=1

SYSGEN_SHELL=1

SYSGEN_STANDARDSHELL=1

SYSGEN_TOUCH=1

SYSGEN_URLMON=1

SYSGEN_USB=1

SYSGEN_USB_HID=1

SYSGEN_USB_HID_CLIENTS=1

SYSGEN_VIEWER_IMAGE=1

SYSGEN_WININET=1

 

C:\WINCE500\PBWorkspaces\MyPlatform\RelDir\Emulator_x86_Debug>

 

I could pipe the sysgen list to a text file, open a second workspace, open a build window pipe the sysgen list to another text file, and then use tools like WinDiff to compare the files – I could then go back to Platform Builder and either search the catalog for the sysgens or add them by hand using the Platform | Settings | Environment variable dialog.

 

 Did you know you can right click on the catalog and type the name of a sysgen or component? – try it now,  right click on the “Catalog”, type “HTTPD” – bingo, you have just found the HTTPD Web Server component.

 

Figuring out the delta between two platform workspaces is pretty easy – command window, sysgens piped to text files and WinDiff, easy.

 

But how about finding out the delta between the current workspace and the original Platform Builder Template – your platform may well be based on Internet Appliance, but what have you added or removed from the base platform – now that’s a different question entirely… more on this shortly.

 

- Mike