Java:以管理员身份运行

Mar*_*aux 40 java windows uac exe admin

Java中是否有办法要求系统控制管理员功能.当然没有这样做:右键单击exe - >以管理员身份运行.
我想要的是来自UAC的框架,如Windows Vista或Windows 7.

或者我从jar中制作exe时要做一些设置?

Zip*_*pyV 20

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

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

  • 问题当然是"可执行文件"将是JVM,而不是您自己的代码.由于清单适用于JVM,因此它适用于该JVM运行的任何内容. (8认同)
  • @Cal - 是 - 一旦进程升级,它创建的所有进程都将被提升.UAC高程字面上会改变应用程序运行的用户,并且它是单向的 - 您可以提升,但不能降低. (3认同)

小智 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
Run Code Online (Sandbox Code Playgroud)


Yis*_*hai 8

ZippyV的答案很好,如果您打算启动具有系统管理员权限的javaw.exe,如果纯Java代码被UAC阻止(例如尝试将文件写入特权目录),那就是你的意思需要做的.

但是,如果您尝试在外部启动某些东西,但只是提升,则可以捆绑提升命令的exe.这是一个.


mat*_*thd 5

您可以使用Windows程序来提升您的权限.程序将显示UAC提示符,然后您将拥有管理员权限.

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

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

Runtime.getRuntime().exec("Elevate.exe yourcommand");
Run Code Online (Sandbox Code Playgroud)