After installing CityDesk, you have to reboot.
Donald E. Knuth
Not true. You only have to reboot if you *HAVE* to reboot. i.e. you had an older version of a dll that we need the newer version of - and since you can't replace a dll that is loaded into memory, it requires a reboot.
Why are you replacing DLLs that are being used by existing applications? Haven't you heard of DLL Hell? You should look into using DLL/COM redirection.
Donald E. Knuth
In fairness, this opinion isn't. Fair, that is.
... or they could always put the DLL in the CityDesk directory, or does the DLL namespace not include paths?
When Donald Knuth suggests that you "look into using DLL/COM redirection", I hope you at least gave it a moment's thought.
COM does *not* solve DLL hell. That's very well known to folks who work in the field.
Application specific copies of system level or runtime DLLs is horrible, horrible, just don't do it or recommend it.
The number of times I've heard the same 'reboot' complaint from people who just don't understand what they're talking about. After trying to explain for the umpteenth time you get to a stage where just can't be bothered!
If you're using DLLs as just DLLs, they don't have to overwrite existing DLLs. Just put them in the application's "bin" directory (wherever the .exe is). That's the first place Windows looks when it's loading a .dll for an application. We did that for years with DLLs like mfc???.dll, msvcrt??.dll, etc. Disk space be really cheap these days. :)
Unfortunately, Microsoft has an integrity system that prevents running certain "protected" DLLs (and thus their descendant DLLs) from the local user space. You cannot put MSVCRT*.DLL in your local directory and get it to run. It just simply doesn't work.
The other problem with Donnies solution (DLL in App Directory) is if whenyou start your application and an older verison of the DLL is already in memery (From another app) then Windows will force you to use the old DLL even thou you have the newer one in your apps directory.
Fog Creek Home