Part of a good "operations" regimen is to include regularly scheduled down times for any sort of upgrades such as are needed for any living product.
What I did was in my startup form, one of the things that happened was I had a table of down-times scheduled. I could put several events in the list. The form would do a SELECT FIRST ordered by earliest date not in the past. This down-time entry would include a start-time and a stop-time.
If you tried to log in, the startup form would check to see if the current time was between the start and stop times of the event. If so, it would kick you out. If not, it would display the start time of the next down time session and provide a brief description of the reason for the downtime. You would be notified that the database would become unavailable at thus-and-such a date.
The startup form, unlike any other forms, didn't go away. It minimized and hid itself. BUT the code was still running. So... approximately every minute, the hidden form's timer would go off to check for that event time. If the scheduled time became current, the database politely - but FIRMLY - asked you to leave. One minute later, it no longer asked. It just kicked you out. And there is how you manage it. The first few times you kick someone out, they get ticked. After a while they get used to it.