15

是否可以从 Java 应用程序中请求提升权限?我看到的建议似乎都集中在运行外部可执行文件或设置清单以在启动时请求权限。例如,这些对小程序不可用。有没有办法从正在运行的应用程序请求提升?

4

5 回答 5

10

UAC 不是正在运行的进程可以请求的东西(与您运行的语言无关)。您必须在启动时请求提升。

大多数 Windows 应用程序处理此问题(并使其看起来像是在请求提升)的方式是生成自己的额外副本,请求提升,并将足够的命令行参数传递给新进程,以便可以显示适当的对话框。

这就是为什么对话框中的 UAC 提升总是通过单击打开新对话框的按钮来启动。

因此,在 Java 世界中,您只需做其他人必须做的事情:再次启动您的应用程序,请求提升。有几种方法可以启动提升,“run as”动词可能是最简单的。

于 2009-07-03T01:37:43.920 回答
3

看起来 Sun 将不得不在 JRE 中处理这种情况,因为除了运行外部进程之外没有其他方法可以执行提升的操作。

如果 JRE 支持它,JVM 可能必须为请求提升的 java 代码运行一个单独的提升进程。

然而,目前,据我所知,只有清单或运行外部应用程序是唯一可用的解决方案。

问题是,你需要提升什么?

于 2009-07-02T21:48:50.997 回答
2

您必须使用外部(本机)应用程序来执行此操作。这篇文章提供了源代码和一个很好的解释: UAC Prompt From Java

于 2011-05-04T23:40:34.900 回答
0

您可以使用jna并执行 ShellExec。对于 lpOperation,使用“runas”(未记录)。由于您可能需要存储在注册表中的(当前)JavaVM 的完整路径,请查看注册表访问,这是 JNA 的一部分。

于 2013-02-06T08:07:31.937 回答
0

转到安装 java 的文件夹。打开 javaw.exe / java.exe 的属性并将“以管理员身份运行”选项设置为 true。

于 2013-03-05T07:54:02.073 回答