Java:以管理员身份运行

时间:2009-09-06 15:02:46

标签: java windows admin uac exe

Java中是否有办法要求系统控制管理员功能。 当然不做:右键点击exe - >以管理员身份运行 我想要的是来自UAC的框架,如Windows Vista或Windows 7。

或者我从jar中制作exe时要做一些设置吗?

8 个答案:

答案 0 :(得分:20)

您必须创建一个清单文件,指定您的应用程序需要管理员权限。您可以在清单中包含清单,也可以将其保存为单独的文件(yourapp.exe.manifest)

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

答案 1 :(得分:9)

最简单的方法是使用包装器启动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

答案 2 :(得分:8)

如果您打算启动具有系统管理员权限的javaw.exe,ZippyV的答案很好,如果纯Java代码被UAC阻止(例如尝试将文件写入特权目录),那么是你需要做的。

但是,如果您尝试在外部启动某些内容,但只是提升,则可以捆绑提升命令的exe。 Here is one

答案 3 :(得分:5)

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

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

然后你可以运行这样的命令:

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

答案 4 :(得分:2)

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

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

这是一个处理在Windows批处理文件中请求UAC访问的线程: How to request Administrator access inside a batch file

注意: ProcessBuilder处理起来有点棘手,使用StreamGobbler为我处理输出工作: Handle Input using StreamGobbler

答案 5 :(得分:1)

为此,我在Windows上使用命令行。在“开始”菜单中,在文本框中键入 cmd ,当程序出现 cmd.exe 时,右键单击它并选择以管理员身份运行。现在,当您执行 java -jar 时,它将以管理员权限运行。

答案 6 :(得分:1)

我将解释如何获得提升的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");
    }
}

如果{-1}}来自-Argument of Start-Process,请不要忘记使用''""。注意不要忘记 - 如果使用工作目录并且jar文件必须在工作目录示例中

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

你可以看到带有参数的高架java:)

祝你好运!

答案 7 :(得分:-4)

访问安装文件夹中的java.exe和javaw.exe。 即 - C:\ Program Files \ Java \ jre7 \ bin或C:\ Program Files \ Java \ jdk1.7.0_17 \ bin 左键单击它们并选择属性 - &gt;兼容性,然后: 选中“以管理员身份运行此程序”。

相关问题