我需要使用Preferences API的systemRoot功能,但是如果UAC处于打开状态,则由于缺少Windows权限而失败。我试图找到弹出UAC提示并提升权限以允许systemRoot更新成功的技术细节。如何提升Java的UAC权限?
11
A
回答
6
根据已接受的对this SO question的回答,您无法更改正在运行的进程的UAC权限。
根据答案this SO question,推出以提升的权限的过程可能的方式是:
- 创建一个包装与Windows清单请求提出的权限启动JVM(使用适当的参数!) ,或
- 使用链接到第二个答案的应用程序以提升的权限运行JVM。
2
除了清单使用JNI调用带有verb = runas的ShellExecute也会这样做 - 但使用清单指定内容是一种更健壮的方式。获取嵌入到exe中的清单可能有点棘手,并且早期版本的Visual C++中的清单处理存在很多问题,但其中大多数都是现在制定出来的。
也就是说,我鼓励你认真思考为什么你需要访问系统根目录 - 是否存储所有用户的设置?如果是这样,你可能想考虑有一个单独的应用程序来管理这些设置(使用它自己的清单)。你不能只是弹出一个UAC提升对话框 - 你实际上必须启动一个新的进程(如果你看到任务管理器的应用程序似乎以这种方式工作,你会看到应用程序的第二个实例实际上启动 - 查看任务管理器中的UAC虚拟化列以查看差异)。
另一种可能性是,你绝对必须从非提升过程中配置注册表的区域来调整安全设置 - 但这违背了UAC的设计,它会几乎总是造成更多的麻烦比它的价值。可能更好地喝M $ kool-aid并为UAC正确设计你的应用程序。 (相信我,我感到你的痛苦 - 经历过很多次)。
当我正经历着这种痛苦我自己,我发现下面的MSDN文章非常有助于了解微软的设计意图与UAC:
http://msdn.microsoft.com/en-us/library/aa511445.aspx
希望这有助于...
2
你可以使用运行作为根库:https://github.com/dyorgio/run-as-root
// Specify JVM options (optional)
RootExecutor rootExecutor = new RootExecutor("-Xmx64m");
// Execute privileged action
rootExecutor.run(() -> System.out.println("Call your admin code here."));
PS:我是作者。
相关问题
- 1. 使用UAC进行权限提升
- 2. UAC如何知道应用程序需要提升权限?
- 3. Java管理权限(UAC)
- 4. 提升权限
- 5. .net 2.0 Windows应用程序需要提升的uac权限
- 6. Win7,SP1,UAC,管理权限和提升 - 问题!
- 7. 如何提升子进程的权限
- 8. JScript:如何获得提升的权限(管理员权限)
- 9. VBScript的权限提升
- 10. CreateProecssAsUser提升的权限?
- 11. 如何使用UAC提升Perl进程
- 12. 从MMC管理单元中的新AppDomain不会获得UAC的提升权限
- 13. Ansible - 用于权限提升
- 14. PYTHON复制权限提升
- 15. QProcess用户权限提升
- 16. 在权限提升C#.NET
- 17. 如何在Vista +上使用Java/JNA提升权限启动应用程序以触发UAC
- 18. 使用清单打开新控制台窗口提升UAC的权限
- 19. Delphi:需要时提示UAC提升
- 20. Firemonkey OS X - 请求提升的权限
- 21. 带有提升权限的Sharepoint查询
- 22. Wix安装的文件提升权限
- 23. 提升C#脚本的权限
- 24. 通过RunOnce提升权限的Powershell
- 25. 的Metasploit:bypassuac窗口权限提升挂起
- 26. 加载DLL需要UAC提升特权与jni
- 27. 64位的UAC提升的Delphi清单
- 28. UAC提升,运行一些不提升的代码
- 29. UAC提升使用简单的COM DLL
- 30. 在OS X中提升Java进程的权限
[UAC和Java]的可能重复(http://stackoverflow.com/questions/1076794/uac-and-java) – 2011-01-11 21:03:40
排序然而,这个特定的问题严重缺乏使其工作所需的技术细节。我正在寻找*实用信息,而不是我们都知道的理论。 :-) – 2011-01-12 13:18:52
在java bug数据库中有一个“无法修复”的bug:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6790382 – 2014-11-03 16:50:10