2009-09-06 3 views
37

Есть ли способ в Java, чтобы попросить систему получить контроль над функциональностью администратора. Конечно, не делая: Щелкните правой кнопкой мыши на exe -> запустите как admin.
Что я хочу, так это то, что наступает UAC, например, в Windows Vista или Windows 7.Java: запуститься как администратор

Или мне нужно выполнить некоторые настройки при создании exe из банки?

ответ

20

Вам необходимо создать файл манифеста, который указывает, что для вашего приложения необходимы разрешения администратора. Вы можете включать в манифесте в ехе или сохранить его в виде отдельного файла (yourapp.exe.manifest)

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

+8

Проблема, конечно, в том, что «исполняемый файл» будет JVM, а не вашим собственным кодом. И поскольку манифест применяется к JVM, он применим к чему-либо, управляемому этой JVM. – MSalters

+1

Что делать, если у вас есть обертка exe, запускающая java? Будет ли доступ администратора доступным для дочернего процесса (jvm)? – Cal

+3

@Cal - Да - как только процесс будет повышен, все процессы, которые он создает, будут повышенными. Высота UAC буквально меняет пользователя, что приложение работает как, и это улица с односторонним движением - вы можете поднимать, но вы не можете отбросить назад. –

8

ответ ZippyV является штраф, если вы намерены запустить javaw.exe с системой прав администратора, который если чистый код Java - это то, что блокируется UAC (например, попытка записать файл в привилегированный каталог), то это то, что вам нужно будет сделать.

Если, однако, вы пытаетесь запустить что-то внешнее, но только с высотой, вы можете связать exe, который поднимает команду. Here is one.

+0

Спасибо! Обычно вы не хотите, чтобы пользовательское приложение запускалось как администратор (только определенные привилегированные действия), поэтому, вероятно, это наиболее подходящее решение в большинстве случаев. Мне также нравится, что у Elevate.exe есть опция -wait, поэтому вы можете заблокировать до тех пор, пока не будет выполнена команда повышенного значения. – rob

+0

Если я правильно прочитал вашу ссылку, необходимо также изменить реестр, который не всегда может быть вариантом. – likejiujitsu

5

Вы можете использовать программу windows для повышения привилегий. Программа покажет приглашение UAC, и тогда у вас будет привилегия администратора.

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

Вы можете затем запустить для команды, как это:

Runtime.getRuntime().exec("Elevate.exe yourcommand"); 
9

Самый простой способ будет использовать оболочку для запуска виртуальной машины Java, а затем поднять обертку. Я использую простой скрипт установки 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 
1

Для этого я использую для этого командную строку на окнах. В меню «Пуск» введите cmd в текстовое поле и когда появится программа cmd.exe, щелкните правой кнопкой мыши по ней и выберите «Запуск от имени администратора». Теперь, когда ytou выполняет java -jar, он будет работать с правами администратора.

+0

Это работа для меня, спасибо за очень простое решение. –

-3

Доступ к java.exe и javaw.exe внутри папки установки. ie - C: \ Program Files \ Java \ jre7 \ bin или C: \ Program Files \ Java \ jdk1.7.0_17 \ bin щелкните левой кнопкой мыши по ним и выберите свойства-> совместимость и там: проверьте, запускайте эту программу как администратор».

+2

Это действительно плохая идея, так как она дает права администратора на все права Java. Вредоносные программы даже не должны использовать возможности безопасности в реализации Java для того, чтобы pawn ваша система, поскольку вы только что передали ключ. –

2

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

String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"}; 
    ProcessBuilder pb = new ProcessBuilder(commands); 
    .. 
    pb.start(); 

Вот нить, которая занимается запрашивает доступ UAC в пределах окна пакетного файла: How to request Administrator access inside a batch file

ПРИМЕЧАНИЕ: ProcessBuilder может быть немного сложнее иметь дело, используя StreamGobbler для обработки выходных работ для меня: Handle Input using StreamGobbler

0

я объясню, как вы получите повышенные приложения 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 <program.exe> -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"); 
    } 
} 

Чем вы получили повышенную программу. Я Recommand вам - Вам нужно преобразовать в двоичную обертку, как 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. Примечание Не забывайте - Если вы используете рабочий каталог и банку файл должен быть в рабочем примере каталога \ myJar.jar Java \ RunAsAdminExample.class Чем вы можете увидеть повышенный Java с аргументом :)

С наилучшими пожеланиями..!

Смежные вопросы