Как мне повысить свои разрешения UAC от Java? - PullRequest
12 голосов
/ 11 января 2011

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

Ответы [ 3 ]

6 голосов
/ 12 января 2011

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

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

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

Вы можете использовать библиотеку запуска от имени пользователя: 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."));

PS: я автор.

2 голосов
/ 12 января 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...