web-dev-qa-db-ja.com

Java:管理者として実行

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

または、jarからexeを作成するときに設定を行う必要がありますか?

40

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

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

20
ZippyV

最も簡単な方法は、ラッパーを使用して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
9
Matt DeVillier

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

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

8
Yishai

Windowsプログラムを使用して、特権を昇格できます。プログラムにUACプロンプトが表示され、管理者権限が与えられます。

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

その後、次のようなコマンドを実行できます。

Runtime.getRuntime().exec("Elevate.exe yourcommand");
5
mathd

Windows CMDバッチファイルから実行する必要があるものは何でも実行できます。Java必要なことを実行するアプリ内からバッチファイルを(オンザフライでも)作成できます。それが動作しているので、Javaプログラムがこれを起動し、ユーザーに通常のウィンドウUACプロンプトをポップアップし、ユーザーがYESを選択した場合にコマンドを実行します。

    String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"};
    ProcessBuilder pb = new ProcessBuilder(commands);
    ..
    pb.start();

以下は、Windowsバッチファイル内でUACアクセスを要求するスレッドです。 バッチファイル内で管理者アクセスを要求する方法

注:StreamGobblerを使用して出力を処理するために、ProcessBuilderを扱うのは少し難しい場合があります。 StreamGobblerを使用して入力を処理する

2
crig

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などのバイナリラッパーに変換する必要があります。クリックすることはできません-カスタムインストーラーを作成する場合(Java SwingまたはAwtによって作成されます)

あなたが良い解決策を持っていることを願っています:)-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");
    }
}

Start-Processの-Argumentから''の場合、""および-jar <filename>.jarを使用することを忘れないでください。注-作業ディレクトリを使用する場合、jarファイルは作業ディレクトリの例にある必要があります。

  • 。\ myjar.jar
  • Java。\ RunAsAdminExample.class

より高い引数でJavaを見ることができるより:)

宜しくお願いします!

1
SourceSkyBoxer

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

1
Kaptkaos