Java有没有办法让系统控制管理员功能。 当然没有做:右键单击该exe - >以管理员身份运行。
我想要的是来自UAC的帧,比如在Windows Vista或Windows 7中。Java:以管理员身份运行
或者我是否在从jar中制作exe时做了一些设置?
Java有没有办法让系统控制管理员功能。 当然没有做:右键单击该exe - >以管理员身份运行。
我想要的是来自UAC的帧,比如在Windows Vista或Windows 7中。Java:以管理员身份运行
或者我是否在从jar中制作exe时做了一些设置?
您必须创建一个清单文件,指定您的应用程序需要管理员权限。您可以包括体现在你的EXE或保持它作为一个单独的文件(yourapp.exe.manifest)
ZippyV的回答是好的,如果你打算推出具有系统管理员权限的javaw.exe的这如果纯Java代码被UAC阻塞(例如试图将文件写入特权目录),那么这就是您需要执行的操作。
但是,如果您尝试启动外部的某些内容,但仅使用高程,则可以将提升命令的exe捆绑在一起。 Here is one。
谢谢!您通常不希望用户应用程序以管理员身份运行(仅限某些特权操作),因此在大多数情况下这可能是更合适的解决方案。我也喜欢Elevate.exe有一个-wait选项,所以你可以阻止,直到提升命令完成。 – rob 2011-01-14 20:33:05
如果我正确地读取了你的链接,还必须修改注册表,这可能并不总是一个选项。 – likejiujitsu 2013-08-13 15:55:01
您可以使用Windows程序来提升您的权限。该程序将显示UAC提示,然后您将拥有管理员权限。
http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/
您可以命令这样然后运行:
Runtime.getRuntime().exec("Elevate.exe yourcommand");
最简单的方法是使用一个包装,推出你的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
我在Windows上使用命令行来达到此目的。从开始菜单中,在文本框中键入cmd,当程序cmd.exe出现时,右键单击它并选择以管理员身份运行。现在当你执行java -jar它将以管理员权限运行。
这对我很有用,感谢非常简单的解决方案 – 2014-11-24 08:52:43
访问安装文件夹内的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管理员”。
这是一个非常糟糕的主意,因为它赋予了_every_ Java程序管理员权限。恶意软件甚至不需要利用Java实施中的安全漏洞来打开系统,就像刚刚移交密钥一样。 – 2015-09-28 12:49:46
如果你可以运行任何你需要从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
我将解释如何得到提升的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的说法:)
最好的问候。!
问题当然是,“可执行”将是JVM,而不是您自己的代码。由于清单适用于JVM,因此它适用于由该JVM运行的任何内容。 – MSalters 2009-09-08 10:59:18
如果你有一个启动java的包装exe文件?管理员访问权是否会被子进程(jvm)继承? – Cal 2009-10-22 03:01:03
@Cal - 是 - 一旦进程被提升,它创建的所有进程都将被提升。 UAC提升字面上会更改应用程序运行的用户,并且它是单向街道 - 您可以提升,但不能降低。 – 2011-01-12 04:32:14