Запустите файл Java от имени администратора с полными правами.

Я сделал Java-приложение и протестировал его на своем компьютере и своем компьютере, пока все хорошо ... Но это приложение для другого моего друга, у которого есть дискотека, когда я «установил» свое приложение на его компьютер ( Windows Vista 32 бита) это не сработало, затем я ищу и ищу, и я узнаю, что проблема в привилегиях... Я установил виртуальную машину Vista 32 бит и xp 32 бит, чтобы выполнить некоторые тесты, и я m не могу запустить свое приложение с полными правами администратора.

Есть ли способ создать пакетный файл или что-то, что позволило бы мне запускать мое приложение со всеми привилегиями? Я имею в виду все, потому что мне нужно подключиться к COM-порту компьютера, чтобы получить некоторые данные с устройства, и мне нужно сохранить некоторые файлы, и, поскольку я использую внешнюю библиотеку, мне могут потребоваться некоторые привилегии, которые я не знаю ... Я пробовал это, и ничего не работает:

elevate "c:\Program Files\Java\jre\bin\java.exe" -jar "%CD%\installer.jar"

используя скрипты повышения уровня от Microsoft, я также создал пакетный файл с

runas /user:Administrator myjar.jar

но ничего не получилось :\ Есть идеи? заранее спасибо


person João Silva    schedule 26.09.2013    source источник


Ответы (4)


Этот ответ предназначен для тех, кто хочет предоставить административные привилегии своим банкам или классам Java. После успешной разработки exe для редактирования файлов, хранящихся в admin. каталоги с ограниченным доступом, я разработал эти шаги для вас, надеюсь, что это может вам помочь: Что нужно понять: 1) JAR-файлы не будут напрямую скомпилированы с привилегиями, вам нужно обернуть их каким-либо другим файлом mainfest, чтобы наконец иметь exe файлы, способные работать в Windows XP/Vista/ или более поздней версии с привилегиями. На самом деле возможный ответ до сих пор заключается в том, что перед запуском exe вынуждает пользователя предоставить права администратора, в отличие от того, что раньше, когда пользователь должен знать, как запускать jar с правами администратора, что не является дружественным.

Теперь простые шаги:

  1. Создайте файл jar, например try2.jar, содержащий некоторый файл mainifest - My1.mf, как всегда. Таким образом, абсолютный путь к файлу jar будет C:\try.jar.

  2. Теперь вам нужно загрузить программное обеспечение «Launch4j», которое поможет вам обернуть jar-файлы. Его ссылки для скачивания: http://sourceforge.net/projects/launch4j/files/launch4j-3/3.1.0.-beta2/

  3. Теперь выньте 5 мин. и посмотрите это руководство: http://www.youtube.com/watch?v=mARUFRknTYQ Это расскажет вам об основных функциях Launch4j. Но тут будет непонятно, как создать файл манифеста для своего exe.

  4. Узнав об этом, создайте файл манифеста, это простой текстовый файл с сохраненным расширением «.manifest». Но здесь нужно позаботиться о некоторых вещах: во-первых, ваш файл mainfest должен иметь то же имя, что и у вашего окончательного исполняемого файла, который будет создан. В моем случае имя моего исполняемого файла должно было быть «Launchme.exe», поэтому мой файл манифеста должен был называться «Launchme.manifest». Во-вторых, в файле манифеста просто скопируйте этот контент:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
    <requestedPrivileges>
    <requestedExecutionLevel level="highestAvailable"   uiAccess="False" />
    </requestedPrivileges>
    </security>
    </trustInfo>
    </assembly>  
    

скопируйте приведенный выше код в файл манифеста. здесь строка 6 является ключом ко всей проблеме. Затем сохраните его и закройте.

  1. Теперь запустите Launch4j, заполните все обучаемые текстовые поля, как в видео, в соответствии с вашими условиями. В столбце Wrapper mainfest добавьте этот файл манифеста. Затем нажмите «Сохранить конфигурацию», а затем нажмите «Создать оболочку».

Теперь у вас есть исполняемый файл, содержащий вашу банку, которая запрашивает у пользователя права администратора перед выполнением. Теперь пользователь не знает ничего, кроме кликов!

person Ashium    schedule 01.03.2014
comment
Извините, что возвращаюсь к такому старому сообщению, но есть ли способ избавиться от неизвестного издателя, когда он запрашивает права администратора? - person Maverick283; 27.04.2015
comment
Хороший ответ. Просто такой файл прав администратора не позволяет ему принимать события перетаскивания. Я не могу перетаскивать файлы в его графический интерфейс. - person Brad; 11.06.2017
comment
@Brad, может быть, это флаг uiAccess? Я проверю это и попробую установить значение true - person Pasha Skender; 14.08.2017
comment
Недурно. Но не обязательно, чтобы МАНИФЕСТ имел то же имя, что и exe. - person Dila Gurung; 16.10.2017

Я создал общее решение этой проблемы на основе Java на github по адресу https://github.com/rritoch/super-user-application . Система использует JNA или Sudo для предоставления кросс-платформенного Java-приложения (jar), которое выполняется с правами администратора. Самый простой способ использовать его — сделать так, чтобы ваш основной класс расширял абстрактный класс SuperUserApplication и вызывал SU.run(new MyMain(), args) из вашей основной функции следующим образом.

package com.vnetpublishing.java;

import com.vnetpublishing.java.suapp.SU;
import com.vnetpublishing.java.suapp.SuperUserApplication;

public class TestAdmin extends SuperUserApplication {

    public static void main(String[] args) {
        SU.run(new TestAdmin(), args);
    }

    public int run(String[] args) {
        System.out.println("RUN AS ADMIN! YAY!");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

Эта библиотека была протестирована на Linux и Windows, но должна работать и на Mac/OSX. Основным недостатком этого решения является то, что оно работает только тогда, когда приложение выполняется как jar. Если исполняемый файл jar не имеет прав администратора, ему необходимо повторно выполнить файл jar с правами администратора. Если приложение не было запущено из jar, оно выдает InvalidStateException.

Не стесняйтесь вносить свой вклад в этот проект.

person Ralph Ritoch    schedule 28.04.2015
comment
У вас есть уже созданный файл jar, чтобы я мог быстро добавить его в проект, который я делаю в netbeans? Если нет, можете ли вы объяснить, как это скомпилировать в netbeans? Я не хочу получать maven, если это требование. - person Rabbit Guy; 14.10.2015
comment
Просто загрузите его с maven mvnrepository.com/artifact/com. .vnetpublishing.java/ - person Ralph Ritoch; 14.10.2015

Запустите командную строку в режиме администратора. Более конкретно:

  1. Найдите файл %windir%\system32\cmd.exe.
  2. Щелкните правой кнопкой мыши и привилегия run as administrator.
person Vengat Maran    schedule 09.03.2015

Использование Gradle

Вы также можете использовать Gradle и плагин launch4j. Начните с шага 3 ответа Ashium, т.е. создайте файл myapp.manifest с

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable"   uiAccess="False" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>  

затем добавьте к своему build.gradle

plugins {
  id 'java'
  id 'edu.sc.seis.launch4j' version '2.4.3'
}

launch4j {
    mainClassName = 'com.mypackage.MainClass'
    icon = "$projectDir/icons/icon.ico"
    manifest = "$projectDir/myapp.manifest"
}
person PHPirate    schedule 05.04.2018