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

Я сделал приложение Java, и я тестировал его на своем ПК и моем придуманном ПК, до сих пор так хорошо... Но это приложение для другого моего друга, у которого есть дискотека, когда я "установил" свое приложение на своем ПК (Windows Vista 32 bits), это не сработало, затем я иду искать и искать, и я узнаю, что проблема в качестве привилегий... Я установил виртуальную машину vista 32 бит и xp 32 бит для выполнения некоторых тестов, и я не могу запустить свое приложение с полным администратором преференции.

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

elevate "c:Program FilesJavajrebinjava.exe" -jar "%CD%installer.jar"

используя сценарии elevate от microsoft, я также создал пакетный файл с

runas /user:Administrator myjar.jar

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

4 ответов


этот ответ предназначен для тех, кто хочет предоставить административные привилегии своим классам jars или java. После успешной разработки exe для редактирования файлов, хранящихся в admin. ограниченные каталоги, я разработал эти шаги, чтобы следовать за вами, надеюсь, это может помочь вам: Вещи, которые нужно понять: 1) банки не будут напрямую скомпилированы с привилегиями, скорее, вы должны обернуть их каким-то другим файлом mainfest, чтобы, наконец, иметь exe-файлы, способные работать на windows xp / vista/ или выше версия с привилегиями. На самом деле возможный ответ до сих пор заключается в том, что перед запуском exe заставляет пользователя давать права администратора, в отличие от того, где пользователь должен знать, как запустить jar с правами администратора, который не является дружественным.

теперь несложных шагов:

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

  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. после изучения этого, затем создайте файл манифеста, это простой текстовый файл с расширением ".манифест " спасен. Но здесь некоторые вещи, о которых нужно позаботиться: во-первых, ваш файл mainfest должен иметь то же имя, что и ваш окончательный exe для создания. В моем случае имя моего exe должно было быть " Launchme.exe " таким образом, мой файл манифеста должен был быть назван как "Launchme.проявляться." Во-вторых, в файле манифеста просто скопируйте этот контент:

    <?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 добавьте этот файл манифеста. Затем нажмите кнопку" сохранить конфигурацию " и нажмите кнопку-- Build Wrapper.

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


Я создал общее решение на основе Java для этой проблемы на github в https://github.com/rritoch/super-user-application . Система использует JNA или Sudo для предоставления кросс-платформенного java-приложения (jar), которое выполняется с правами администратора. Самый простой способ использовать его-расширить абстрактный класс SuperUserApplication и позвоните СУ.запустите (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.

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


Использовать 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"
}

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

  1. найти .
  2. щелкните правой кнопкой мыши и run as administrator привилегии.