如何从 Java 提升我的 UAC 权限?
我需要使用首选项API的systemRoot功能,但是如果UAC处于打开状态,则由于Windows上的权限不足,因此无法正常工作。我正在尝试查找弹出UAC提示并提升权限以允许systemRoot更新成功的技术细节。
我需要使用首选项API的systemRoot功能,但是如果UAC处于打开状态,则由于Windows上的权限不足,因此无法正常工作。我正在尝试查找弹出UAC提示并提升权限以允许systemRoot更新成功的技术细节。
根据此 SO 问题的可接受答案,您无法更改正在运行的进程的 UAC 权限。
根据此 SO 问题的答案,使用提升的权限启动进程的可能方法是:
除了使用 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
希望这有帮助...