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

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

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

8 ответов

Решение

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

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

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

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

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

Затем вы можете запустить команду так:

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

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

Однако, если вы пытаетесь запустить что-то внешнее, но только с повышением прав, вы можете связать исполняемый файл, который повышает команду. Вот один.

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

// РЕДАКТИРОВАТЬ хорошую идею от 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 <filename>.jar от - Аргумент Старт-Процесс. Примечание не забывайте - если вы используете рабочий каталог и файл jar должен быть в рабочем каталоге, пример

  • .\ MyJar.jar
  • Java .\RunAsAdminExample.class

Чем вы можете увидеть повышенную Java с аргументом:)

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

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

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

Вот поток, который имеет дело с запросом доступа UAC в пакетном файле Windows: Как запросить доступ администратора внутри пакетного файла

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

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

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

Другие вопросы по тегам