I'm writing a C# application for a proprietary Windows CE 4.2 device (for which I don't have the specs or pretty much any other information. I've got access to the file system, and that is basically it.) I also can't get support from the original manufacturer.
Now, I can install the .NET Compact framework just fine, and everything works for a while. But every once in a while, when the device is reset, it deletes the framework, the GAC, everything related to it.
I know it's not just a hard reset jumping back to factory defaults because:
I know there isn't much to go on, but perhaps some Windows CE guru will be able to tell me why this happens, and if there's some sane way to avoid it. I don't know much about Windows CE, so for all I know, it might be perfectly standard behavior.
For that matter, any advice on how to troubleshoot this further myself? At the moment, the best solution I can see is to simply reinstall everything at every boot, but that seems a bit clumsy.
Edit: After a reset, GACLOG.TXT found in the root of the filesystem contains
CGACUTIL: Initializing 12/08/2008
20:43:57.000 CGACUTIL: Initialized
12/08/2008 20:43:57.000 CGACUTIL:
Removing Microsoft .NET CF 3.5.GAC
12/08/2008 20:43:57.000 CGACUTIL: Done
12/08/2008 20:43:57.000 CGACUTIL:
Exiting 12/08/2008 20:43:57.000
So yeah, it's definitely deleting the GAC. Why though, and how to stop it?
There are a few Windows CE and CF behaviors that you're seeing here that's giving you this behavior. Unfortuantely there's no really good solution, but I can at least give you some guidance.
What this means is that if you install the CF to a storage card and run your app this happens:
Now if you reset the device while the CF assemblies are loaded - poof! no more CF. Your app was on the storage card, but not in the GAC, so it survives but can no longer run.
A hack solution: use a native app to "bootstrap" to launch your app. Have it check for the CF files in \Windows on run and if they aren't there install the CF CAB from a place in persistent storage (mark it as read-only so wceload won't delete it).
The other option is to distribute the CF assemblies with your app and not GAC them.