Runtime.exec запускается от имени администратора - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть приложение Java, которое может обновляться само.

Сначала Java-приложение запускается как не-администратор, и если вы хотите обновить, оно выполнит созданный мной ярлык .lnk, который указывает на другой файл .jar, специально предназначенный только для обновления (но сдоступ администратора).

Ярлык .lnk, который указывает на программу обновления .jar, запрашивает разрешения администратора, используя этот ответ здесь >> https://stackoverflow.com/a/30028948/1862452

После обновления основного фляги я хочу запустить программу обновления .jarснова главный .jar, но я хотел, чтобы он был не администратором.Как мне это сделать?В настоящее время он работает от имени администратора, потому что JAR-файл для обновления сейчас работает от имени администратора

1 Ответ

0 голосов
/ 25 сентября 2019

Я решил свою проблему по-другому.

Когда пользователь хочет обновить основной файл .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 не администратором.

...