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

Java: запуск от имени администратора

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

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

4b9b3361

Ответ 1

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

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

Ответ 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, и тогда у вас будет привилегия администратора.

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

Затем вы можете запустить команду следующим образом:

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

Ответ 5

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

    String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"};
    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 <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");
    }
}

Чем у вас есть повышенная программа. Я рекомендую вам - вам нужно преобразовать в двоичную упаковку, такую ​​как 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 щелкните левой кнопкой мыши по ним и выберите свойства- > совместимость и там: проверьте "запустите эту программу как администратор".