管理者機能を制御するようにシステムに要求する方法は Java にありますか。もちろん、実行せずに: exe を右クリック -> 管理者として実行します。
私が欲しいのは、Windows Vista や Windows 7 のように UAC からフレームが来ることです。
または、jar から exe を作成する際にいくつかの設定を行う必要がありますか?
アプリケーションに管理者権限が必要であることを指定するマニフェスト ファイルを作成する必要があります。マニフェストを exe に含めることも、別のファイル (yourapp.exe.manifest) として保持することもできます。
最も簡単な方法は、ラッパーを使用して JVM を起動し、ラッパーを昇格させることです。これを行うには、UAC プラグインで単純な NSIS インストーラー スクリプトを使用します。
; Java Launcher
;--------------
; You want to change the below lines
Name "my program"
Caption "my program Launcher"
Icon "iconfile.ico"
OutFile "java launcher.exe"
; param below can be user, admin
RequestExecutionLevel admin
!include UAC.nsh
SilentInstall silent
AutoCloseWindow true
ShowInstDetails show
Section ""
; command to execute
StrCpy $0 'javaw -jar myjarfile'
SetOutPath $EXEDIR
Exec $0
SectionEnd
システム管理者権限でjavaw.exeを起動する場合、ZippyVの答えは問題ありません.純粋なJavaコードがUACによってブロックされている場合(特権ディレクトリにファイルを書き込もうとするなど)、それがあなたのする必要があります。
ただし、昇格だけで外部のものを起動しようとしている場合は、コマンドを昇格させるexeをバンドルできます。これが1つです。
Windows プログラムを使用して、特権を昇格できます。プログラムは UAC プロンプトを表示し、管理者権限を取得します。
http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/
次に、次のように for コマンドを実行できます。
Runtime.getRuntime().exec("Elevate.exe yourcommand");
Windows CMDバッチファイルから実行する必要があるものを何でも実行できる場合..Javaアプリ内からバッチファイルを作成して(オンザフライでも)、必要なことを実行して起動できます。私はそれが機能しているので、私のJavaプログラムはこれを起動し、通常のWindows UACプロンプトをユーザーにポップアップ表示し、YESを選択するとコマンドを実行します。
String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"};
ProcessBuilder pb = new ProcessBuilder(commands);
..
pb.start();
以下は、Windows バッチ ファイル内での UAC アクセスの要求を処理するスレッドです: バッチ ファイル 内で管理者アクセスを要求する方法
注:ProcessBuilderは、StreamGobblerを使用して出力を処理するのが少し難しい場合があります。StreamGobblerを使用して 入力を処理します
昇格したJavaアプリケーションを取得する方法を説明します
import java.io.IOException;
public class RunAsAdminExample {
public static void main(String[] args) throws IOException {
Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process <program.exe> -verb RunAs");
}
}
program.exe は、notepad.exe を呼び出すだけの例です。
import java.io.IOException;
public class RunAsAdminExample {
public static void main(String[] args) throws IOException {
Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs");
}
}
あなたが昇格したプログラムを持っているより。私はあなたをお勧めします - Launch4j や Parcle のようなバイナリ ラッパーに変換する必要があります。
良い解決策があることを願っています:) - LinuxまたはMac OS Xを使用している場合は、必要に応じてParcleバイナリラッパーまたは他のラッパーを使用してください...
// Kaptkaos の良いアイデアを編集する シンプルに書くより:
import java.io.IOException;
public class RunAsAdminExample {
public static void main(String[] args) throws IOException {
Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs");
}
}
''
and ""
if -jar <filename>.jar
from -Argument of Start-Processを使用することを忘れないでください。忘れないでください-作業ディレクトリを使用する場合、jarファイルは作業ディレクトリの例にある必要があります
あなたが引数で昇格したJavaを見ることができるより:)
よろしくお願いします!
この目的のために、Windows でコマンド ラインを使用します。[スタート] メニューから、テキストボックスに「 cmd 」と入力し、プログラムcmd.exeが表示されたら、それを右クリックして [管理者として実行] を選択します。これで、ytou がjava -jarを実行すると、管理者権限で実行されます。