Java中有没有办法要求系统控制管理员功能。当然不用做:右键单击exe -> 以管理员身份运行。
我想要的是像 Windows Vista 或 Windows 7 那样来自 UAC 的框架。
或者我在从 jar 中制作 exe 时需要做一些设置吗?
您必须创建一个清单文件,指定您的应用程序需要管理员权限。您可以在 exe 中包含清单或将其保存为单独的文件 (yourapp.exe.manifest)
最简单的方法是使用包装器来启动 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
如果您打算以系统管理员权限启动 javaw.exe,ZippyV 的答案很好,如果纯 Java 代码是被 UAC 阻止的内容(例如尝试将文件写入特权目录),那么您就是这样将需要做。
但是,如果您尝试在外部启动某些东西,但只是通过提升,您可以捆绑一个提升命令的 exe。这是一个。
您可以使用 Windows 程序来提升您的权限。该程序将显示 UAC 提示,然后您将拥有管理员权限。
http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/
然后,您可以像这样运行命令:
Runtime.getRuntime().exec("Elevate.exe yourcommand");
如果您可以从 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 处理输入
我将解释如何获得提升的 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>.jar
from -Argument of Start-Process。注意不要忘记 - 如果你使用工作目录和 jar 文件必须在工作目录示例
比您可以看到带有参数的提升的java :)
最好的祝福!
为此,我在 Windows 上使用命令行。从开始菜单中,在文本框中键入cmd,当程序cmd.exe出现时,右键单击它并选择以管理员身份运行。现在当 ytou 执行java -jar时,它将以管理员权限运行。