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。这是一个

于 2009-09-06T15:17:03.217 回答
6

您可以使用 Windows 程序来提升您的权限。该程序将显示 UAC 提示,然后您将拥有管理员权限。

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

然后,您可以像这样运行命令:

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

如果您可以从 Windows CMD 批处理文件运行您需要运行的任何内容。您可以从您的 java 应用程序中创建一个批处理文件(甚至在运行中),它​​可以执行您想要的操作并启动它。我让它工作,所以我的 java 程序启动它,它会向用户弹出正常的 windows UAC 提示,然后如果他们选择是,则运行命令。

    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 这样的二进制包装器,然后才能单击 - 如果您创建自定义安装程序(由 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");
    }
}

不要忘记使用''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 回答