如何从 Java 提升我的 UAC 权限?

2022-09-04 22:14:49

我需要使用首选项API的systemRoot功能,但是如果UAC处于打开状态,则由于Windows上的权限不足,因此无法正常工作。我正在尝试查找弹出UAC提示并提升权限以允许systemRoot更新成功的技术细节。


答案 1

根据此 SO 问题的可接受答案,您无法更改正在运行的进程的 UAC 权限。

根据此 SO 问题的答案,使用提升的权限启动进程的可能方法是:

  • 创建一个包装器来启动JVM(使用适当的参数!),其中包含请求提高特权的Windows清单,或者
  • 使用链接到第二个答案的应用程序以提升的权限运行 JVM。

答案 2

除了使用 JNI 调用 ShellExecute 与动词 = runas 的清单之外,还可以执行此操作 - 但是使用清单指定事物是一种更可靠的方法。在 exe 中嵌入清单可能有点棘手,并且在早期版本的 Visual C++ 中,清单处理存在很多问题,但其中大多数问题现在都已解决。

也就是说,我鼓励您认真思考为什么需要访问系统根目录 - 是否要存储所有用户的设置?如果是这样,您可能需要考虑使用单独的应用程序来管理这些设置(具有自己的清单)。你不能只是弹出打开一个UAC提升对话框 - 你实际上必须启动一个新进程(如果你查看任务管理器中似乎以这种方式工作的应用程序,你会看到应用程序的第二个实例实际上已经启动 - 查看任务管理器中的UAC虚拟化列以查看差异)。

另一种可能性是调整注册表区域中的安全设置,您绝对必须从非提升的进程中配置这些设置 - 但这与UAC的设计背道而驰,并且几乎总是会导致比其价值更多的麻烦。可能最好喝M$kool-aid,并为UAC正确设计你的应用程序。(相信我,我感受到了你对此的痛苦 - 经历过很多次)。

由于我自己也经历过这种痛苦,我发现下面的MSDN文章对于理解Microsoft使用UAC的设计意图非常有帮助:

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

希望这有帮助...


推荐