Я решил свою проблему по-другому.
Когда пользователь хочет обновить основной файл .jar, он выполняет Runtime.exec()
дважды.Первый, где он вызывает cmd и выполняет ярлык .lnk для программы обновления, которая запрашивает доступ администратора.Второй - наблюдатель для окна .jar модуля обновления.
Файл .jar наблюдателя выполняет команду Windows tasklist /fi "Windowtitle eq <JAR UPDATER WINDOW NAME>"
очень часто (скажем, каждые 1 с) и считает строки выходных данных.Имеет 2 состояния
1) Детектор обновлений работает (количество строк на выходе> 1)
2) Детектор обновлений мертв (количество строк на выходе == 1)
После2 состояния, это означает, что main.jar был обновлен, а программа обновления мертва.Затем он вызывает main.jar.
Поскольку этот watcher .jar вызывается с правами администратора, он также будет называть main.jar не администратором.