Подтвердить что ты не робот

Как повысить права доступа UAC от Java?

Мне нужно использовать функцию systemRoot API Preferences, но она не работает из-за отсутствия разрешений на Windows, если UAC включен. Я пытаюсь найти технические детали появления подсказки UAC и повышения моих разрешений, чтобы обновления системы были успешными.

4b9b3361

Ответ 1

В соответствии с принятым ответом на этот вопрос SO вы не можете изменять разрешения UAC для выполняющегося процесса.

В соответствии с ответами на этот вопрос SO возможные способы запуска процесса с повышенными правами:

  • создать оболочку для запуска JVM (с соответствующими аргументами!) с манифестом окон, который запрашивает повышенные привилегии, или
  • используйте приложение, связанное со вторым ответом, чтобы запустить JVM с повышенными привилегиями.

Ответ 2

В дополнение к манифесту Использование JNI для вызова ShellExecute с помощью verb = runas также сделает это, но определение вещей с помощью манифеста - более надежный способ сделать это. Получение манифеста, встроенного в exe, может быть немного сложным, и в более ранних версиях Visual С++ было много проблем с обработкой манифеста, но большинство из них теперь разработаны.

Тем не менее, я бы посоветовал вам задуматься о том, почему вам нужно получить доступ к системному корню - хранить ли настройки для всех пользователей? Если это так, вы можете захотеть иметь отдельное приложение для управления этими настройками (с его собственным манифестом). Вы не можете просто открыть диалог повышения UAC - вам действительно нужно запустить новый процесс (если вы посмотрите на диспетчер задач с приложениями, которые работают так, вы увидите, что второй экземпляр приложения фактически запускается - посмотрите на столбец виртуализации UAC в диспетчере задач, чтобы увидеть различия).

Еще одна возможность - настроить параметры безопасности в области реестра, которые вы абсолютно должны настроить из своего невыполненного процесса, - но это противоречит дизайну UAC, и это почти всегда вызовет больше проблем, чем стоит, Вероятно, лучше пить M $kool-помощь и правильно настроить приложение для UAC. (Поверьте мне, я чувствую вашу боль от этого - через него несколько раз).

Как я сам испытывал эту боль, я нашел следующую статью MSDN, весьма полезную для понимания намерений Microsoft в отношении UAC:

http://msdn.microsoft.com/en-us/library/aa511445.aspx

Надеюсь, что это поможет...

Ответ 3

Вы можете использовать библиотеку run-as-root: https://github.com/dyorgio/run-as-root

// Specify JVM options (optional)
RootExecutor rootExecutor = new RootExecutor("-Xmx64m");

// Execute privileged action
rootExecutor.run(() -> System.out.println("Call your admin code here."));

P.S.: Я автор.