Una forma de realizar lo que quiere que use un usuario delegado. Eso funciona mejor con las tareas que no tienen una GUI, pero también podría funcionar con las tareas de la GUI (si realmente funciona o no, depende de demasiados detalles para ser descritos aquí: necesita experimentar)
Debe evitar que los usuarios de Windows ejecuten cualquier aplicación Java (por ejemplo, a través de un cambio en los permisos en el sistema de archivos donde se encuentra el JRE).
Luego creas un usuario diferente que tiene los derechos necesarios para ejecutar tu aplicación y escribe un pequeño script que inicia tu aplicación. Ese script también debe estar protegido contra modificaciones (al menos) por parte del usuario regular.
Finalmente, creas una tarea programada para ejecutar tu script (opcionalmente, puedes ejecutar la línea de comandos whol JRE desde esa tarea programada pero es menos ajustable) y configurarlo para que se ejecute como el usuario delegado. Debe proporcionar al usuario habitual una forma de iniciar la tarea: puede explicar cómo hacerlo desde el propio programador de tareas o, como prefiero hacer, configurarlo para que se ejecute cuando aparezca un evento específico en el registro de eventos y use la función de creación de eventos. comando en un archivo por lotes para agregar ese evento.
Otra forma es usar Citrix o RemoteApp en una máquina diferente (con una aplicación perfecta). Tendrá que bloquear la sesión bastante para evitar que el usuario ejecute una línea de comandos.
Finalmente, en Windows 10/2016, puedes intentar usar un contenedor docker. Para tareas automatizadas, eso funcionará bien. Para las aplicaciones GUI, no estoy seguro de que pueda funcionar: sé que es posible en Linux pero no lo he probado en Windows.