Javaアプリケーション内から昇格された権限を要求することは可能ですか?私が見た提案はすべて、外部実行可能ファイルの実行または起動時に特権を要求するマニフェストの設定に集中しているようです。これらは、たとえばアプレットでは使用できません。実行中のアプリケーションから昇格を要求する方法はありますか?
5 に答える
UACは、実行中のプロセスが要求できるものではありません(実行している言語は関係ありません)。起動時に昇格をリクエストする必要があります。
ほとんどのWindowsアプリがこれを処理する(そして昇格を要求しているように見せかける)方法は、適切なダイアログを表示できるように、自分自身の追加のコピーを生成し、昇格を要求し、新しいプロセスに十分なコマンドライン引数を渡すことです。
これが、ダイアログのUACの昇格が、新しいダイアログを開くボタンのクリックによって常に開始される理由です。
したがって、Javaの世界では、他のすべての人がしなければならないことを正確に実行する必要があります。つまり、アプリを再度起動して、昇格を要求します。高架を起動する方法はいくつかありますが、「runas」動詞がおそらく最も簡単です。
外部プロセスを実行する以外に昇格されたアクションを実行する方法はないため、SunはJREでそのような状況を処理する必要があるようです。
JREがそれをサポートしている場合、JVMは、昇格を要求するJavaコードに対して別の昇格されたプロセスを実行する必要があります。
ただし、現時点では、マニフェストまたは外部アプリケーションの実行のみが、私が知る限り利用可能な唯一のソリューションです。
問題は、何のために標高が必要かということです。
これを行うには、外部(ネイティブ)アプリケーションを使用する必要があります。この投稿は、ソースコードと優れた説明を提供します: JavaからのUACプロンプト
jnaを使用してShellExecを実行できます。lpOperationには、「runas」を使用します(これは文書化されていません)。レジストリに格納されている(現在の)JavaVMへのフルパスが必要になる可能性があるため、JNAの一部であるレジストリアクセスを確認してください。
javaがインストールされているフォルダに移動します。javaw.exe / java.exeのプロパティを開き、「管理者として実行」オプションをtrueに設定します。