XMLSpy, how could you?

A while back, on the advice of friends I both deeply respect and care about, I decided to take the plunge, swallow the red pill, and develop as a non-admin on my laptop. For the most part, it’s been a pretty smooth experience, thanks to the tips that Keith Brown offers up in his latest book and online wiki, except for the odd program that just doesn’t like to play by the rules. (Interestingly enough, I can’t think of a Java tool I use that’s been affected by this change–most of the headaches have come from tools that have more to do with the .NET space than the Java space. This I attribute to the fact that Unix-y folks have a rich tradition of not developing as root, so they’re accustomed to the idea and build their systems accordingly.)

One such utility that shocks me in its noncompliance is Altova’s XML Spy; when attempting to install as non-admin, it claims that the .exe is corrupted and needs to be downloaded. After installation, when you run it as non-admin and attempt to fill in the keycode, it tries to write the license file to the Program Files directory, which of course a non-admin doesn’t have access to. (Fortunately, filling out the keycode as admin and then re-running solves the problem.)

Bad Altova! No biscuit!

Particularly since this is such a simple thing–just write the license file to (a) the Registry, or (b) the user’s home directory (C:\Documents and Settings\Ted\xmlspy.lic, for example); there’s really zero need to put this into Program Files given the other options.

(And by the way, Java folks, just keep doing what you’re doing. 🙂 (Now if only we had a bit stronger configuration story, but that’s another story for another day; in fact, the strong .NET configuration story that I’ve been preaching may have a pretty huge flaw in it for precisely this same reason–you can’t write back to the .config file if it’s stored in Program Files, either. So in some respects, at least for user-configuration settings, .NET is in the same boat as Java, except it’s worse, because they lack a Preferences API equivalent. *sigh*)