web-dev-qa-db-ja.com

Javaファイルを完全な権限を持つ管理者として実行します

私はJavaアプリケーションを作成し、これまでのところ私のPCと私の造られたPCでテストしました。これまでのところは良いです...しかし、このアプリケーションはディスコを持っている私の友人のために自分のアプリケーションを彼のPC(Windows Vista 32ビット)に「インストール」し、動作しなかったので、検索と検索を行って、特権として問題を見つけました... Vista 32ビットとXPの仮想マシンをインストールしました32ビットでいくつかのテストを行うと、完全な管理者権限でアプリケーションを実行できません。

すべての特権でアプリケーションを実行できるバッチファイルまたは何かを作成する方法はありますか?つまり、デバイスのデータを取得するにはコンピューターのCOMポートに接続し、ファイルを保存する必要があり、外部ライブラリを使用しているので、知らない特権が必要になる可能性があるからです...私はこれを試しましたが、何も動作しません:

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

microsoftの昇格スクリプトを使用して、バッチファイルも作成しました。

runas /user:Administrator myjar.jar

しかし、何も動作しませんでした:\何かアイデア?前もって感謝します

21
João Silva

この答えは、jarまたはJavaクラス。あなたが、これがあなたに役立つことを願っています:理解すること:1)ジャーは特権で直接コンパイルされないでしょう、あなたは最終的にWindows XP/Vista /で実行可能なexeファイルを持つために他のメインフェストファイルでラップする必要があります以上のバージョンの特権。実際には、実行可能な答えは、実行する前に、ユーザーが友好的ではない管理者権限でjarを実行する方法を知っていると予想される以前とは異なり、ユーザーに管理者権限を与えることです。

簡単な手順:

  1. いくつかのmainifestファイルを含むtry2.jarのようなjarファイルを作成します-いつものようにMy1.mfです。したがって、jarファイルの絶対パスはC:\ try.jarになります。

  2. 次に、jarファイルをラップするのに役立つソフトウェア「Launch4j」をダウンロードする必要があります。ダウンロードリンクは次のとおりです。 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」が保存された単純なテキストファイルです。ただし、ここで注意すべき特定の事項があります。まず、メインフェストファイルには、作成する最終的なexeと同じ名前を付ける必要があります。私の場合、exeの名前は「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列で、このファイルマニフェストファイルを追加します。次に、「構成の保存」オプションをクリックし、「ラッパーのビルド」をクリックします。

これで、実行する前に管理者権限を与えるようユーザーに要求するjarを含むexeができました。これで、ユーザーはクリック以外のことを知る必要がなくなりました!

43
Ashium

https://github.com/rritoch/super-user-application のgithubで、この問題に対する一般的なJavaベースのソリューションを作成しました。システムはJNAを使用しますまたは、管理者権限で実行するクロスプラットフォームJavaアプリケーション(jar)を提供するSudo。これを使用する最も簡単な方法は、メインクラスに抽象クラス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がスローされます。

このプロジェクトに貢献してください。

8
Ralph Ritoch

管理者モードでコマンドプロンプトを実行します。より具体的に:

  1. %windir%\system32\cmd.exeファイル。
  2. 右クリックしてrun as administrator特権。
2
Vengat Maran

Gradleを使用する

Gradleと launch4jプラグイン を使用することもできます。 Ashiumの答え のステップ3から開始します。つまり、ファイルを作成します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
PHPirate