web-dev-qa-db-fra.com

Exécutez le fichier Java en tant qu'administrateur avec tous les privilèges

J'ai fait une application Java et je l'ai testée sur mon PC et mon PC inventé, jusqu'ici tout va bien ... Mais cette application est pour un autre de mes amis qui a une discothèque, quand je "installé" mon application sur son pc (Windows Vista 32 bits) ça n'a pas marché, alors je vais chercher et chercher et je découvre que le problème comme les privilèges ... J'ai installé une machine virtuelle de Vista 32 bits et xp 32 bits pour faire des tests et je ne suis pas en mesure d'exécuter mon application avec des privilèges d'administrateur complets.

Existe-t-il un moyen de créer un fichier de commandes ou quelque chose qui me permettrait d'exécuter mon application avec tous les privilèges? Je veux dire tout parce que je dois me connecter à un port COM de l'ordinateur pour obtenir des données d'un appareil et que je dois stocker des fichiers, et puisque j'utilise une bibliothèque externe, j'ai peut-être besoin de privilèges que je ne connais pas ... J'ai essayé cela et rien ne fonctionne:

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

en utilisant les scripts elevate de Microsoft, j'ai également créé un fichier batch avec

runas /user:Administrator myjar.jar

mais rien n'a fonctionné:\Des idées? Merci d'avance

21
João Silva

Cette réponse s'adresse à ceux qui souhaitent fournir des privilèges administratifs à leurs fichiers JAR ou Java classes. Après avoir réussi à développer un exe pour éditer des fichiers conservés dans des répertoires restreints admin., J'ai développé ces étapes à suivre pour vous, j'espère que cela peut vous aider: choses à comprendre: 1) les pots ne seront pas directement compilés avec des privilèges, vous devez les envelopper avec un autre fichier mainfest pour enfin avoir des fichiers exe capables de fonctionner sur windows xp/Vista/ou version supérieure avec privilèges. En fait, la réponse possible jusqu'à maintenant est qu'avant d'exécuter, exe oblige l'utilisateur à donner des droits d'administrateur contrairement à avant où l'utilisateur devrait savoir comment exécuter jar avec des droits d'administrateur, ce qui n'est pas convivial.

Maintenant, les étapes simples:

  1. Créez votre fichier jar comme try2.jar contenant un fichier mainifest - My1.mf comme toujours, le chemin absolu du fichier jar serait donc C:\try.jar.

  2. Vous devez maintenant télécharger un logiciel "Launch4j" qui vous aidera à envelopper les fichiers jar. Ses liens de téléchargement sont: http://sourceforge.net/projects/launch4j/files/launch4j-3/3.1.0- beta2 /

  3. Maintenant, sortez 5 min. et regardez ce tutoriel: http://www.youtube.com/watch?v=mARUFRknTYQ ; cela vous indiquera les fonctions de base de Launch4j. Mais ici, il ne sera pas clair comment créer un fichier manifeste pour votre exe.

  4. Après avoir appris cela, puis créez un fichier manifeste, c'est un simple fichier texte avec l'extension ".manifest" enregistré. Mais voici certaines choses à prendre en charge: Premièrement, votre fichier mainfest doit avoir le même nom que celui de votre exe final pour être créé. Dans mon cas, le nom de mon exe était supposé être "Launchme.exe" donc mon fichier manifeste devait être nommé "Launchme.manifest". Deuxièmement, dans le fichier manifeste, copiez simplement ce contenu:

    <?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>  
    

copiez le code ci-dessus dans votre fichier manifeste. ici la ligne 6 est la clé de toute la question. Ensuite, enregistrez-le et fermez-le.

  1. Maintenant, lancez Launch4j, remplissez tous les champs de texte enseignés comme dans la vidéo selon vos conditions. Dans la colonne Mainfest de Wrapper, ajoutez ce fichier manifeste de fichier. Cliquez ensuite sur l'option "enregistrer la configuration", puis sur - Build Wrapper.

Maintenant, vous avez un fichier exe contenant votre jar qui demande à l'utilisateur de donner des droits d'administrateur avant de l'exécuter. Maintenant, l'utilisateur est libre de savoir autre chose que des clics!

43
Ashium

J'ai créé une solution générique Java basée sur ce problème sur github à https://github.com/rritoch/super-user-application . Le système utilise JNA ou Sudo pour fournir une plateforme multiplateforme Java application (jar) qui s'exécute avec des droits d'administrateur. La façon la plus simple de l'utiliser est de demander à votre classe principale d'étendre la classe abstraite SuperUserApplication et appelez SU.run (new MyMain (), args) à partir de votre fonction principale comme suit.

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;
    }
}

Cette bibliothèque a été testée sur Linux et Windows, mais devrait également fonctionner pour Mac/OSX. Le principal inconvénient de cette solution est qu'elle ne fonctionne que lorsque l'application est exécutée en tant que jar. Lorsque le pot exécuté n'a pas de droits d'administrateur, il doit réexécuter le pot avec des privilèges d'administrateur. Si l'application n'a pas été exécutée à partir d'un fichier jar, elle génère une exception InvalidStateException.

N'hésitez pas à contribuer à ce projet.

8
Ralph Ritoch

Exécutez votre invite de commande en mode administrateur. Pour plus précis:

  1. Localisez le %windir%\system32\cmd.exe fichier.
  2. Clic droit et run as administrator privilège.
2
Vengat Maran

Utilisation de Gradle

Vous pouvez également utiliser Gradle et le plugin launch4j . Commencez à l'étape 3 de réponse d'Ashium , c'est-à-dire créez un fichier myapp.manifest avec

<?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>  

puis ajoutez à votre 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
PHPirate