Vistaで管理者権限でJavaランタイムプロセスを開始する
-
07-07-2019 - |
質問
iは、java 1.6を使用してVistaにソフトウェアをインストールするsetup.exeインストーラーを実行します。
ユーザーは管理者ではありません。プロセスを開始しようとすると、エラーメッセージが表示されます。
CreateProcess error=740
これは、ユーザーがプロセスを開始するための十分な権限を持っていないことを示します。
プロセスを管理者権限で実行する必要があることを示すフラグまたはオプションを送信できますか? Vista自体には、メニューツールバー内にこの機能があります。この関数をJavaで使用できます。
次のコードを呼び出します
Runtime rt = Runtime.getRuntime();
Process process;
try {
String fileToExecute = new File(mFolder, mSetupFiles[0]).getCanonicalPath();
if (logger.isDebugEnabled()) {
logger.debug("Execute runtime process");
}
process = rt.exec(fileToExecute, null, mFolder);
process.getErrorStream().close();
process.getInputStream().close();
process.getOutputStream().close();
if (logger.isDebugEnabled()) {
logger.debug("Wait until process is finished");
}
process.waitFor();
} catch (IOException e) {
throw new StartException(e);
} catch (InterruptedException e) {
throw new StartException(e);
}
解決 2
2日間のテストの後、次の解決策が見つかりました。
Vista UAC機能がアクティブになると、エラーが発生します。プロセスに管理者権限が必要な場合、UACは毎回質問ダイアログを表示します。
このダイアログを表示すると問題が発生します。
古いものを使用する代わりに
process = rt.exec(fileToExecute, null, mFolder);
コマンド、私は現在新しい1.5 を使用していますProcessBuilder コマンド
編集:
問題を回避するには、許可を要求するコマンドウィンドウを開く必要があります。そして、外部プロセスを呼び出す必要があります。
ProcessBuilder builder = new ProcessBuilder(new String[] { "cmd.exe", "/C", fileToExecute });
こちらも参照外部プログラムを実行
所属していません StackOverflow