42

管理者機能を制御するようにシステムに要求する方法は Java にありますか。もちろん、実行せずに: exe を右クリック -> 管理者として実行します。
私が欲しいのは、Windows Vista や Windows 7 のように UAC からフレームが来ることです。

または、jar から exe を作成する際にいくつかの設定を行う必要がありますか?

4

7 に答える 7

21

アプリケーションに管理者権限が必要であることを指定するマニフェスト ファイルを作成する必要があります。マニフェストを exe に含めることも、別のファイル (yourapp.exe.manifest) として保持することもできます。

http://msdn.microsoft.com/en-us/library/bb756929.aspx

于 2009-09-06T15:11:14.893 に答える
10

最も簡単な方法は、ラッパーを使用して 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
于 2011-10-05T14:56:26.950 に答える
8

システム管理者権限でjavaw.exeを起動する場合、ZippyVの答えは問題ありません.純粋なJavaコードがUACによってブロックされている場合(特権ディレクトリにファイルを書き込もうとするなど)、それがあなたのする必要があります。

ただし、昇格だけで外部のものを起動しようとしている場合は、コマンドを昇格させるexeをバンドルできます。これが1つです。

于 2009-09-06T15:17:03.217 に答える
6

Windows プログラムを使用して、特権を昇格できます。プログラムは UAC プロンプトを表示し、管理者権限を取得します。

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

次に、次のように for コマンドを実行できます。

Runtime.getRuntime().exec("Elevate.exe yourcommand");
于 2011-09-17T20:23:49.527 に答える
3

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を使用して 入力を処理します

于 2014-06-26T23:23:09.177 に答える
3

昇格した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>.jarfrom -Argument of Start-Processを使用することを忘れないでください。忘れないでください-作業ディレクトリを使用する場合、jarファイルは作業ディレクトリの例にある必要があります

  • .\myjar.jar
  • java .\RunAsAdminExample.class

あなたが引数で昇格したJavaを見ることができるより:)

よろしくお願いします!

于 2016-10-13T17:05:23.567 に答える
0

この目的のために、Windows でコマンド ラインを使用します。[スタート] メニューから、テキストボックスに「 cmd 」と入力し、プログラムcmd.exeが表示されたら、それを右クリックして [管理者として実行] を選択します。これで、ytou がjava -jarを実行すると、管理者権限で実行されます。

于 2013-02-15T19:08:47.733 に答える