No veo una solución universal para esa funcionalidad, cada maquina suele estar adaptada al usuario (y los hay de todos los colores) por lo que pueden tener diferentes esquemas de seguridad.
Personalmente utilizaría otro procedimiento para acordar con el usuario el mantenimiento, a lo sumo aceptaría que las actualizaciones fueran de diferentes niveles
Las habrá estéticas (cambiar colores o posicionamiento de los menús ... ) pero sin ellas se puede seguir trabajando.
Las habrá funcionales (un cambio en las tablas, consultas o ...) y esas pueden crear conflictos si no se aplican.
El método:
Al abrir la aplicación de trabajo hace sus controles y 'detecta' que hay una nueva versión.
.- No la hay, simplemente inicia la jornada.
.- La hay, pueden darse que sea prioritaria (funcional) o simplemente no trascendente (estética).
-- Caso estético: se le informa al usuario que hay cambios y se le permite continuar (lo hará en otro momento, ahora puede estar apurado).
-- Caso Funcional: Se le informa al usuario que mientras no se actualice no podrá seguir trabajando y cierra la aplicación.
En cualquiera de los casos para actualizar la aplicación tiene que salir de la actual y tras ello iniciar el actualizador (que es independiente) y tras verificar que la principal no está abierta y que se cumplen las condiciones: la actualiza.
¿Qué puede pasar si un usuario inicia el actualizador porque tiene un rato disponible?:
Pues que evalúa si hace falta (y la aplica de darse las condiciones) o informa de que no hay nada que actualizar y se cierra.
Bajo mi punto de vista no habrá usuario que pueda poner problemas y lo que puede entrar en discusión es si actualiza siempre o no o ... pero eso es una directiva que la impone el programador o la consensua con el usuario, el programador solo es responsable de que la actualización no interrumpa el flujo normal de trabajo.