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

12

我知道这里有很多关于同样问题的提问,但在这些问题中我没有找到想要的答案,即一种特定的方法。

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

  1. 为了做到这一点,我需要与Windows UAC机制交互。
  2. 这不能单靠Java代码完成,需要批处理文件或VBS脚本的帮助。
  3. 除非重新启动应用程序,否则无法将正在运行的Java进程提升以获取管理员权限。
  4. 提升一个.jar文件也会提升JVM和所有依赖于JVM的其他进程,这会涉及安全问题。

我不想重新启动任何应用程序,我的目标是让Java应用程序(.jar文件)从开始就具有管理员权限。如果为此,用户必须点击某些UAC窗口,那么好的,不用担心。

所以,我的问题是(通过阅读其他帖子询问几乎相同的事情,我无法得到具体的答案)。 我该如何做到这一点?我需要创建什么文件,并带有什么内容?(.bat或.vbs),我可以把这些文件放在我的 .jar 文件中吗?我需要在我的应用程序中实现什么Java代码?

请尽可能具体地提供解决方案。其他帖子中的答案要么太模糊(谈论“可能”解决方案,但没有提到具体和完整的解决方案),要么解释得太多而不提供具体的方式或代码。

3个回答

26

好的,你有两个选择。

第一种:以管理员身份打开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

基于此页面的答案。

希望这可以帮助您!


在Stackoverflow上有很多类似的问题。这个答案是适用于所有问题的唯一可接受的答案!谢谢。 - Juliano Rodrigo Lamb
让我建议@Edudjr,您可以使用start 'javaw -jar -Xms1024m -Xmx1024m your.jar'。在此处查看更多信息https://dev59.com/WG025IYBdhLWcg3w76lq - Juliano Rodrigo Lamb

1

也许大家都知道了,但是……

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

0

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

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


如果在右键单击.jar文件时出现“以管理员身份启动”选项,这将不会是一个问题,但该选项并未出现(不知道为什么)。.jar是一个GUI应用程序,我希望尽可能地使整个过程对用户透明和自动化。 - FiroKun
转到兼容性(在上下文菜单下)并检查选项。应该有一个选项始终以管理员身份打开您的应用程序。 - mhyst
请查看此链接:https://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/ - mhyst
不,兼容性选项不适用,因为这是一个 .jar 文件,而不是一个 .exe 文件。我更喜欢不涉及 Windows 命令提示符相关的任何内容,我需要一种更快、更重的方式,不会失败。 - FiroKun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接