My name's Bill and it's been three months since my last post. Here's what you've missed:
I'm adding a new technology to my list of 'devils', Windows Installer aka MSI. I warn you to only use MSI if you have an extremely simple application and you only do major upgrades OR if you are a full time install engineer with a rock solid build process. If you don't fall into one of those two scenarios I recommend NSIS if you need something free or an InstallShield 'pure InstallScript' project. I have mountains of respect for the folks responsible for the Office or Visual Studio installations. I read a lot of rants against InstallScript but overall I have found it to be solid. The only gripe I have is that the documentation is horrible. I do a lot of work with OSS so I can deal with little or no documentation. But InstallShield is worse because often times the documentation is WRONG. I'd rather have no documentation than inaccurate documentation. Install testing is the worst especially when you support Win 98, 2000, XP, 2K3, and Vista, in multiple languages. Throw in upgrades and patches and the nightmare is complete. It doesn't help that we have fielded multiple versions in the past with almost no planning or organization. What happens when you install 8.2 over the top of 8.1.16? How about if you install 8.1, then patch to 8.2, then install 8.3 over the top? We switched from an access db to a sqlite db from 8.3 to 8.4 so now we need to migrate that data. How do we rollback? Do I need to be an Administrator? What about UAC? Do they have the right version of MDAC? Is that version supported on 98? AHHHH!!! KILL ME NOW!!!
We've also been prototyping the re-platforming of our app from .Net 1.1 to unmanaged VC++ 8.0 using WTL for the UI. I've never programmed C++ professionally so there was a lot of learning involved for me. Did a lot of reading and a lot of banging my head against the wall. I think I will name my next kid Unresolved External Symbol :). Since I had never done C++ before I took for granted a lot of the things that .Net does for you. Memory management aside, the ability to add a reference to a dll and start using it is awesome. Don't have to futz with headers and libs and exporting symbols and is this a static lib or a dynamic lib? Was it complied in Unicode or MBCS? Debug or Release? Should I use string or wstring or wchar_t or TCHAR or CString or LPCTSTR? STL or ATL? I think I'll just use void* for everything and eliminate the confusion :) The UI is something completely obfuscated by .Net. Everything is a window and all communication happens via messages. This was all completely shocking to me. No events? A text box isn't a TextBox? It doesn't have a .Text getter/setter? Luckily WTL provides some OOness to all this window and message nonsense (as does MFC and ATL). But designing a solid UI in C++ takes a lot of patience and finesse. Why aren't I getting messages? Do I need to forward notifications? Do I need to subclass? Chain Messages? Overall though I think if you could somehow put the .Net UI designer into unmanaged window message land, there would be little point in using .Net. If you are careful and review your code, memory management isn't that difficult. There is life without reflection. Templates are pretty sweet. Oh yeah and it's FREAKING FAST and doesn't require 23 MB+ of prerequisites to run.
I'm back on some MonoRail work now and have a lot of little gems to share so stay tuned.