UAC和Java

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

UAC不是正在运行的进程可以请求的内容(与您运行的语言无关)。 您必须在发布时请求提升。

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

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

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

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

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

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

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

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

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

转到安装java的文件夹。 打开javaw.exe / java.exe的属性并将“run as administator”选项设置为true。