2009-09-06 501 views
37

Java有没有办法让系统控制管理员功能。 当然没有做:右键单击该exe - >以管理员身份运行。
我想要的是来自UAC的帧,比如在Windows Vista或Windows 7中。Java:以管理员身份运行

或者我是否在从jar中制作exe时做了一些设置?

回答

20

您必须创建一个清单文件,指定您的应用程序需要管理员权限。您可以包括体现在你的EXE或保持它作为一个单独的文件(yourapp.exe.manifest)

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

+8

问题当然是,“可执行”将是JVM,而不是您自己的代码。由于清单适用于JVM,因此它适用于由该JVM运行的任何内容。 – MSalters 2009-09-08 10:59:18

+1

如果你有一个启动java的包装exe文件?管理员访问权是否会被子进程(jvm)继承? – Cal 2009-10-22 03:01:03

+3

@Cal - 是 - 一旦进程被提升,它创建的所有进程都将被提升。 UAC提升字面上会更改应用程序运行的用户,并且它是单向街道 - 您可以提升,但不能降低。 – 2011-01-12 04:32:14

8

ZippyV的回答是好的,如果你打算推出具有系统管理员权限的javaw.exe的这如果纯Java代码被UAC阻塞(例如试图将文件写入特权目录),那么这就是您需要执行的操作。

但是,如果您尝试启动外部的某些内容,但仅使用高程,则可以将提升命令的exe捆绑在一起。 Here is one

+0

谢谢!您通常不希望用户应用程序以管理员身份运行(仅限某些特权操作),因此在大多数情况下这可能是更合适的解决方案。我也喜欢Elevate.exe有一个-wait选项,所以你可以阻止,直到提升命令完成。 – rob 2011-01-14 20:33:05

+0

如果我正确地读取了你的链接,还必须修改注册表,这可能并不总是一个选项。 – likejiujitsu 2013-08-13 15:55:01

9

最简单的方法是使用一个包装,推出你的JVM,然后提升包装。我使用一个简单的NSIS安装程序脚本和UAC插件来执行此操作:

; 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 
1

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

+0

这对我很有用,感谢非常简单的解决方案 – 2014-11-24 08:52:43

-3

访问安装文件夹内的java.exe和javaw.exe。 ie - C:\ Program Files \ Java \ jre7 \ bin或C:\ Program Files \ Java \ jdk1.7.0_17 \ bin 左键单击它们并选择properties-> compatability,然后: 选中“run this program as管理员”。

+2

这是一个非常糟糕的主意,因为它赋予了_every_ Java程序管理员权限。恶意软件甚至不需要利用Java实施中的安全漏洞来打开系统,就像刚刚移交密钥一样。 – 2015-09-28 12:49:46

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

0

我将解释如何得到提升的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的参数-jar .jar。注意:不要忘记 - 如果你使用的工作目录和JAR文件必须在工作目录例如 \ myjar.jar 的java \ RunAsAdminExample.class 比你看到高架用java的说法:)

最好的问候。!

相关问题