Java:以pipe理员身份运行

Java有没有办法让系统控制pipe理员function。 当然没有做:右键单击该exe – >以pipe理员身份运行。
我想要的是来自UAC的框架,如Windows Vista或Windows 7。

或者让我做一些设置,而从jar子中的exe文件?

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

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

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

如果你打算用系统pipe理员权限启动javaw.exe,如果纯Java代码被UAC阻塞(比如试图将文件写入特权目录),那么ZippyV的答案是好的,那么这就是你将需要做的。

但是,如果你试图启动一些外部的东西,但是只有海拔,你可以捆绑一个提升命令的exe文件。 这是一个 。

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

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

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

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

如果你可以运行任何你需要从一个Windows CMDbatch file运行..你可以创build一个batch file(即时)在您的Java应用程序,做你想做的,并启动它。 我有它的工作,所以我的Java程序启动这个,它popup正常的Windows UAC提示给用户,然后运行命令,如果他们select是。

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

这是一个处理在Windowsbatch file中请求UAC访问的线程: 如何在batch file中请求pipe理员访问

注意:ProcessBuilder可能有点棘手,使用StreamGobbler来处理我输出的工作: 使用StreamGobbler处理input

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

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

比你有升级计划。 我build议你 – 你需要像Launch4j或Parcle转换为二进制包装比你可以点击 – 如果你创build自定义安装程序(由Java Swing或Awt。)

我希望你有好的解决scheme:) – 如果你使用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"); } } 

不要忘记从“启动过程”的参数中使用“”和“”if -jar .jar。 注意不要忘了 – 如果你使用工作目录和jar文件,必须在工作目录的例子中。\ myjar.jar java。\ RunAsAdminExample.class比你可以看到用参数提升的java 🙂

最好的祝福!

访问安装文件夹内的java.exe和javaw.exe。 即 – C:\ Program Files \ Java \ jre7 \ bin或C:\ Program Files \ Java \ jdk1.7.0_17 \ bin左键单击它们,然后select属性 – >兼容性:检查“以pipe理员身份运行此程序”。