The timer is definitely the way to go. We use that here across the country to throw people out of the DB. Yes, we warn them (60 minutes, 30 minutes, and it 5 minutes before shutdown). After that, it saves any open records and closes the DB.
A better trick would be to keep the users out of the DB for a specific time. For example, you want me out of the DB at 5pm. I'm in a meeting from 4pm to 5pm. Having missed all the warning messages, I come back to my desk at 5:05pm, and I need the DB, so I open it. You don't want that to happen either.
The trick here is to check a table (t_AutoTimers, or something that makes sense to you). In that table, you have have fields like this:
AutoLogout (boolean)
TimeoutStart (date/time)
TimeoutResume (date/time)
You set AutoLogout to on/off depending on who you want to be automatically kicked out. For example, you probably don't want yourself to be automatically kicked out, so you'd set that to No for your copy of the DB.
TimeoutStart is the time when your users are automatically kicked out. Easy enough.
TimeoutResume is the time that your users can get back in. Therefore, in the AutoExec of your DB, you compare Now() to the Time in the TimeoutResume field. If Now() < TimeoutResume, a messagebox pops up ("Sorry, the database is under maintenance. Your DB will be available at " & TimeoutResume & "." (Use the DateDiff function to compare two time values.)
This way, you can automatically log out your users, and you can automatically keep them out for X amount of time while you do your maintenance.