Java中是否有办法要求系统控制管理员功能。 当然不做:右键点击exe - >以管理员身份运行 我想要的是来自UAC的框架,如Windows Vista或Windows 7。
或者我从jar中制作exe时要做一些设置吗?
答案 0 :(得分:20)
您必须创建一个清单文件,指定您的应用程序需要管理员权限。您可以在清单中包含清单,也可以将其保存为单独的文件(yourapp.exe.manifest)
答案 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文件必须在工作目录示例中
你可以看到带有参数的高架java:)
祝你好运!
答案 7 :(得分:-4)
访问安装文件夹中的java.exe和javaw.exe。 即 - C:\ Program Files \ Java \ jre7 \ bin或C:\ Program Files \ Java \ jdk1.7.0_17 \ bin 左键单击它们并选择属性 - &gt;兼容性,然后: 选中“以管理员身份运行此程序”。