Ответ 1
Вам необходимо создать файл манифеста, в котором указано, что вашему приложению необходимы разрешения администратора. Вы можете включить манифест в свой exe или сохранить его как отдельный файл (yourapp.exe.manifest)
Есть ли способ в Java, чтобы попросить систему получить контроль над функциональностью администратора.
Конечно, не делая: щелкните правой кнопкой мыши на exe → запустите как admin.
Я хочу, чтобы в UAC появился кадр, например, в Windows Vista или Windows 7.
Или мне нужно выполнить некоторые настройки при создании exe из банки?
Вам необходимо создать файл манифеста, в котором указано, что вашему приложению необходимы разрешения администратора. Вы можете включить манифест в свой exe или сохранить его как отдельный файл (yourapp.exe.manifest)
Самый простой способ - использовать оболочку для запуска вашей 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
Ответ ZippyV прекрасен, если вы намереваетесь запустить javaw.exe с правами системного администратора, который, если чистый код Java является тем, что блокируется UAC (например, пытается записать файл в привилегированный каталог), тогда это то, что вам нужно будет сделать.
Если, однако, вы пытаетесь запустить что-то внешнее, но только с высотой, вы можете связать exe, который поднимет команду. Вот один.
Вы можете использовать программу 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 запускает это, и она выдает пользователю обычное приглашение UAC Windows, а затем запускает команды, если они выбирают YES.
String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"};
ProcessBuilder pb = new ProcessBuilder(commands);
..
pb.start();
Вот поток, который касается запроса доступа UAC в пакетном файле Windows: Как запросить доступ администратора в пакетном файле
Примечание: ProcessBuilder может быть немного сложнее справиться, используя StreamGobbler для обработки выходных работ для меня: Обработать ввод с помощью StreamGobbler
Я использую для этой цели командную строку для окон. В меню "Пуск" введите cmd в текстовое поле и когда появится программа cmd.exe, щелкните ее правой кнопкой мыши и выберите "Запуск от имени администратора". Теперь, когда ytou выполняет java -jar, он будет работать с правами администратора.
Я объясню, как вы получаете повышенное 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 с аргументом:)
С уважением!
Откройте java.exe и javaw.exe внутри папки установки. i.e - C:\Program Files\Java\jre7\bin или C:\Program Files\Java\jdk1.7.0_17\bin щелкните левой кнопкой мыши по ним и выберите свойства- > совместимость и там: проверьте "запустите эту программу как администратор".