Java: запуск от имени администратора
Есть ли способ в Java, чтобы попросить систему получить контроль над функциональностью администратора. Конечно, не делая: щелкните правой кнопкой мыши на exe → запустите как admin.
Я хочу, чтобы в UAC появился кадр, например, в Windows Vista или Windows 7.
Или мне нужно выполнить некоторые настройки при создании exe из банки?
ОТВЕТЫ
Ответ 1
Вам необходимо создать файл манифеста, в котором указано, что вашему приложению необходимы разрешения администратора. Вы можете включить манифест в свой exe или сохранить его как отдельный файл (yourapp.exe.manifest)
Ответ 2
Самый простой способ — использовать оболочку для запуска вашей JVM, а затем поднять оболочку. Для этого я использую простой установщик NSIS script с плагином UAC:
; Java Launcher ;-------------- ; You want to change the below lines Name "my program" Caption "my program Launcher" Icon "iconfile.ico" OutFile "java launcher.exe" ; param below can be user, admin RequestExecutionLevel admin !include UAC.nsh SilentInstall silent AutoCloseWindow true ShowInstDetails show Section "" ; command to execute StrCpy $0 'javaw -jar myjarfile' SetOutPath $EXEDIR Exec $0 SectionEnd
Ответ 3
Ответ ZippyV прекрасен, если вы намереваетесь запустить javaw.exe с правами системного администратора, который, если чистый код Java является тем, что блокируется UAC (например, пытается записать файл в привилегированный каталог), тогда это то, что вам нужно будет сделать.
Если, однако, вы пытаетесь запустить что-то внешнее, но только с высотой, вы можете связать exe, который поднимет команду. Вот один.
Ответ 4
Вы можете использовать программу Windows, чтобы повысить свою привилегию. Программа покажет приглашение UAC, и тогда у вас будет привилегия администратора.
Затем вы можете запустить команду следующим образом:
Runtime.getRuntime().exec("Elevate.exe yourcommand");
Ответ 5
Если вы можете запускать все, что вам нужно для запуска из пакетного файла Windows CMD. Вы можете создать пакетный файл (даже на лету) из вашего java-приложения, которое делает то, что вы хотите, и запустите его. У меня есть работа, поэтому моя программа java запускает это, и она выдает пользователю обычное приглашение UAC Windows, а затем запускает команды, если они выбирают YES.
String[] commands = ; ProcessBuilder pb = new ProcessBuilder(commands); .. pb.start();
Вот поток, который касается запроса доступа UAC в пакетном файле Windows: Как запросить доступ администратора в пакетном файле
Примечание: ProcessBuilder может быть немного сложнее справиться, используя StreamGobbler для обработки выходных работ для меня: Обработать ввод с помощью StreamGobbler
Ответ 6
Я использую для этой цели командную строку для окон. В меню «Пуск» введите cmd в текстовое поле и когда появится программа cmd.exe, щелкните ее правой кнопкой мыши и выберите «Запуск от имени администратора». Теперь, когда ytou выполняет java -jar, он будет работать с правами администратора.
Ответ 7
Я объясню, как вы получаете повышенное java-приложение
import java.io.IOException; public class RunAsAdminExample < public static void main(String[] args) throws IOException < Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -verb RunAs"); > >
program.exe — пример, просто вызовите notepad.exe
import java.io.IOException; public class RunAsAdminExample < public static void main(String[] args) throws IOException < Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs"); >>
Чем у вас есть повышенная программа. Я рекомендую вам — вам нужно преобразовать в двоичную упаковку, такую как Launch4j или Parcle Чем вы можете щелкнуть — если вы создаете пользовательский установщик (сделанный Java Swing или Awt.)
Надеюсь, у вас есть хорошее решение:) — Если вы используете Linux или Mac OS X, вам нужно использовать двоичную упаковку Parcle или другую оболочку, если вы знаете.
//EDIT хорошая идея от Kaptkaos Чем вы пишете просто:
import java.io.IOException; public class RunAsAdminExample < public static void main(String[] args) throws IOException < Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs"); >>
Не забудьте использовать » и «», если -jar.jar из -Argument of Start-Process. Примечание не забывайте. Если вы используете рабочий каталог, а файл jar должен находиться в рабочем каталоге . \MyJar.jar java.\RunAsAdminExample.class Чем вы можете видеть повышенную java с аргументом:)
Ответ 8
Откройте java.exe и javaw.exe внутри папки установки. i.e — C:\Program Files\Java\jre7\bin или C:\Program Files\Java\jdk1.7.0_17\bin щелкните левой кнопкой мыши по ним и выберите свойства- > совместимость и там: проверьте «запустите эту программу как администратор».
Java: запустить от имени администратора
Есть ли способ в Java попросить систему получить контроль над функциями администратора. Конечно, не делая: щелкните правой кнопкой мыши exe -> запустить от имени администратора.
Я хочу, чтобы из UAC приходил кадр, как в Windows Vista или Windows 7. Или мне нужно сделать какие-то настройки при создании exe из фляги?
Ответы (7)
Вам необходимо создать файл манифеста, в котором указано, что вашему приложению требуются права администратора. Вы можете включить манифест в свой exe или сохранить его как отдельный файл (yourapp.exe.manifest) http://msdn.microsoft.com/en-us/library/bb756929.aspx
Проблема, конечно, в том, что исполняемым файлом будет JVM, а не ваш собственный код. И поскольку манифест применяется к JVM, он применяется ко всему, что запускается этой JVM. — person MSalters; 08.09.2009
Что делать, если у вас есть оболочка exe, запускающая java? Будет ли доступ администратора унаследован дочерним процессом (jvm)? — person Cal; 22.10.2009
@Cal — Да — как только процесс будет повышен, все процессы, которые он создает, будут повышены. Повышение уровня UAC буквально меняет пользователя, от имени которого запущено приложение, и это улица с односторонним движением — вы можете повысить уровень, но не можете вернуться назад. — person Kevin Day; 12.01.2011
Самый простой способ — использовать оболочку для запуска JVM, а затем поднять ее. Для этого я использую простой установочный скрипт NSIS с плагином UAC:
; Java Launcher ;-------------- ; You want to change the below lines Name "my program" Caption "my program Launcher" Icon "iconfile.ico" OutFile "java launcher.exe" ; param below can be user, admin RequestExecutionLevel admin !include UAC.nsh SilentInstall silent AutoCloseWindow true ShowInstDetails show Section "" ; command to execute StrCpy $0 'javaw -jar myjarfile' SetOutPath $EXEDIR Exec $0 SectionEnd
Ответ ZippyV в порядке, если вы собираетесь запустить javaw.exe с правами системного администратора, что, если UAC блокирует чистый код Java (например, пытается записать файл в привилегированный каталог), то это то, что вы нужно будет делать. Однако, если вы пытаетесь запустить что-то внешнее, но только с повышением прав, вы можете связать исполняемый файл, который повышает уровень команды. Вот один.
Спасибо! Обычно вы не хотите, чтобы пользовательское приложение запускалось от имени администратора (только определенные привилегированные действия), поэтому в большинстве случаев это, вероятно, более подходящее решение. Мне также нравится, что Elevate.exe имеет параметр -wait, поэтому вы можете заблокировать его до тех пор, пока не будет завершена команда с повышенными правами. — person rob; 14.01.2011
Если я правильно прочитал вашу ссылку, нужно также изменить реестр, что не всегда может быть вариантом. — person likejudo; 13.08.2013
Вы можете использовать программу для Windows, чтобы повысить свои привилегии. Программа покажет приглашение UAC, и тогда у вас будут права администратора. http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/ Затем вы можете запустить следующую команду:
Runtime.getRuntime().exec("Elevate.exe yourcommand");
Если вы можете запускать все, что вам нужно, из командного файла Windows CMD .. Вы можете создать командный файл (даже на лету) из своего Java-приложения, которое делает то, что вы хотите, и запустить его. У меня он работает, поэтому моя java-программа запускает это, и она выдает обычное приглашение Windows UAC для пользователя, а затем запускает команды, если они выбирают ДА.
String[] commands = ; ProcessBuilder pb = new ProcessBuilder(commands); .. pb.start();
Вот поток, который имеет дело с запросом доступа к UAC в пакетном файле Windows: Как запросить доступ администратора в пакетном файле ПРИМЕЧАНИЕ: с ProcessBuilder может быть немного сложно справиться, использование StreamGobbler для обработки вывода работает для меня: Handle Ввод с помощью StreamGobbler
import java.io.IOException; public class RunAsAdminExample < public static void main(String[] args) throws IOException < Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -verb RunAs"); > >
import java.io.IOException; public class RunAsAdminExample < public static void main(String[] args) throws IOException < Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs"); >>
Тогда у вас есть повышенная программа. Я рекомендую вам — вам нужно преобразовать в двоичную оболочку, такую как Launch4j или Parcle, чем вы можете щелкнуть — Если вы создаете собственный установщик (сделанный Java Swing или Awt.) Надеюсь, у вас есть хорошее решение 🙂 — Если вы используете Linux или Mac OS X, вам нужно использовать двоичную оболочку Parcle или другую оболочку, если вы знаете . // РЕДАКТИРОВАТЬ хорошую идею Капткаоса Чем проще написать:
import java.io.IOException; public class RunAsAdminExample < public static void main(String[] args) throws IOException < Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs"); >>
Чем вы можете увидеть повышенную Java с аргументом 🙂
Для этого я использую командную строку в Windows. В меню «Пуск» введите cmd в текстовое поле и, когда появится программа cmd.exe, щелкните ее правой кнопкой мыши и выберите «Запуск от имени администратора». Теперь, когда вы выполняете java -jar, он будет работать с правами администратора.
Автор специально упоминает «Конечно, не делая»: щелкните правой кнопкой мыши на exe — ›Запустите от имени администратора, так в чем смысл этого ответа? — person SeverityOne; 13.10.2020
Как запустить файл от имени администратора? Формат файла jar
Jar файлы запускаются java машиной (или как там его называют) . С системными правами по моему не получится запустить. .
Т. е. если запущен под админом, будет приложение с админ правами..
***.jar — это файлы программ/игрушек ДЛЯ ТЕЛЕФОНА (сотогово) . Конечно можно установить на комп эмулятор какого нибудь сотового и там запустить.
И ответ на твой вопрос — чтоб что либо запустить от имени администратора — НУЖНО ВОЙТИ В СИСТЕМУ ПОД УЧЁТНОЙ ЗАПИСЬЮ АДМИНИСТРАТОРА .
начиная с Windows 7, запускать программу можно просто нажавши по ней правой кнопкой мышки и там выбрать Запуск от Администратора, а можно еще сделать так, чтобы она всегда запускалась в таком режиме, если интересно то вот заметка о том как это сделать:
jar file — это файл-программа, которое открывается (запускается) ява-машиной, установленной на компьютере. Чтобы были админские права, их надо дать самой ява машине.
1) Найдите где у вас установлена ява, вероятно примерно в таком месте C:\Program Files\Java\jre1.8.0_251\bin
2) В папке bin нужно найти файл javaw.exe (именно он запускается при клике на jar файл).
3) В свойствах этого файла идем в раздел Совместимость и ставим галочку «Запускать эту программу от имени администратора». ОК
После этого ява программы будут запускаться с правами администратора.
! Стоит убрать затем галочку, чтобы не было возможности всякой программе иметь админские права.