> ...
> To reindex, I have to ask current users to get out and stay out until I call back - this is something that I dread, because it takes time, and when you think everybody is out, a new user gets in...
This part I solved as follows. We don't work 24/7, but sometimes we need emergency maintenance. So, for several maintenance tasks, I create a file called "maintenance.tmp" in the shared directory. A Timer will check every 2 minutes, and if it finds this file, invoke the application object's OnQuit() method (using Visual Extend).
On application start, the program checks for this same file. If it exists, it will give a corresponding error message, and quit.
One potential problem is that the OnQuit() method might show a dialog (especially if there are pending changes), instead of quitting immediately. So far, it seems that this wasn't a problem in actual practice.
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)