在Windows中以管理员身份执行jar文件

时间:2016-05-08 21:28:00

标签: java windows jar admin

我知道这里有很多问题要求相同,但在任何一个问题中我找不到我想要的答案,这是一种特定的方法。

我知道(如果我错了,请纠正我):

  1. 为此,我需要与Windows UAC机制进行交互。
  2. 这不能用纯Java代码完成,需要批处理文件或VBS脚本的帮助。
  3. 无需重启应用程序即可提升Java运行流程以获取管理员权限。
  4. 提升.jar文件还会提升JVM以及依赖于JVM的所有其他进程,这意味着安全问题。
  5. 我不想重新启动任何应用程序,我的目标是Java应用程序(.jar文件)从开始使用admin权限开始。如果为此,用户将不得不点击一些UAC窗口,好吧,不要在意。

    所以,我的问题(我无法得到和具体的答案阅读其他帖子几乎相同的事情)。 我该怎么做?我需要创建哪些文件以及哪些内容?.bat.vbs),我可以将这些文件放在我的 .jar 文件中吗?我需要在我的应用中实现哪些Java代码?

    请尽可能使用该解决方案。其他帖子中的答案是或者过于模糊(谈论"可能的"解决方案,但不提及具体和完整的解决方案),或解释太多并且没有给出具体的方式或代码。

3 个答案:

答案 0 :(得分:9)

嗯,你有两种选择。

首先:以管理员身份打开CMD并打开jar:

首先以管理员身份运行命令提示符。

Start > cmd > right click > run as administrator.

使用

运行jar文件
java -jar c:\path\to\jar\file.jar

第二:创建一个要求管理员权限的.bat文件

@echo off
:: BatchGotAdmin (Run as Admin code starts)
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: BatchGotAdmin (Run as Admin code ends)
:: Your codes should start from the following line
java -jar c:\path\to\jar\file.jar

请注意,您只应更改最后一行。

我会将 .jar .bat 文件放在同一个文件夹中,并且只将最后一行更改为:

java -jar ./file.jar

基于this page的答案。

希望这有帮助!

答案 1 :(得分:1)

也许每个人都知道这一点,但是。 . .

  1. 创建一个只运行 JAR 文件的批处理文件
  2. 将批处理保存到用户的文档文件夹,右键单击并使用“发送到>桌面(创建快捷方式)”
  3. 右键单击快捷方式转到属性,然后单击“高级”按钮。
  4. 选择以管理员身份运行。 很多事情不允许以管理员身份运行,但批处理总是允许的,当我说批处理时,我指的是批处理的快捷方式。

答案 2 :(得分:0)

比这更简单。使用默认类创建jar文件,这样如果你执行java -jar yourfile.jar,应用程序将启动。给它执行权限。完成所有这些后,只需右键单击您的jar文件并选择“以管理员身份启动”(或类似的东西)。就是这样。

为了帮助用户,编写一个检查是否存在管理员权限的类。如果没有,只需提示用户并指示他们进行上述操作。