私は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
しかし、何も動作しませんでした:\何かアイデア?前もって感謝します
この答えは、jarまたはJavaクラス。あなたが、これがあなたに役立つことを願っています:理解すること:1)ジャーは特権で直接コンパイルされないでしょう、あなたは最終的にWindows XP/Vista /で実行可能なexeファイルを持つために他のメインフェストファイルでラップする必要があります以上のバージョンの特権。実際には、実行可能な答えは、実行する前に、ユーザーが友好的ではない管理者権限でjarを実行する方法を知っていると予想される以前とは異なり、ユーザーに管理者権限を与えることです。
簡単な手順:
いくつかのmainifestファイルを含むtry2.jarのようなjarファイルを作成します-いつものようにMy1.mfです。したがって、jarファイルの絶対パスはC:\ try.jarになります。
次に、jarファイルをラップするのに役立つソフトウェア「Launch4j」をダウンロードする必要があります。ダウンロードリンクは次のとおりです。 http://sourceforge.net/projects/launch4j/files/launch4j-3/3.1.0- beta2 /
今5分を取り出します。このチュートリアルをご覧ください: http://www.youtube.com/watch?v=mARUFRknTYQ ;これにより、Launch4jの基本機能がわかります。ただし、ここでは、exeのマニフェストファイルを作成する方法が明確ではありません。
これを学習した後、マニフェストファイルを作成します。これは、拡張子「.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行目が問題全体の鍵です。それを保存して閉じます。
これで、実行する前に管理者権限を与えるようユーザーに要求するjarを含むexeができました。これで、ユーザーはクリック以外のことを知る必要がなくなりました!
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がスローされます。
このプロジェクトに貢献してください。
管理者モードでコマンドプロンプトを実行します。より具体的に:
%windir%\system32\cmd.exe
ファイル。run as administrator
特権。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"
}