所以我们有一个作为 Windows 服务运行的 java 进程。它需要执行一个命令Runtime.getRuntime().exec(command)
。它执行的命令需要UAC。这是在 Windows Server 2008 上,听起来您无法为单个可执行文件禁用 UAC,那么还有其他方法可以实现此功能吗?
如果您的 Java 应用程序作为 Windows 服务运行,它很可能在以下系统帐户之一下运行:SYSTEM(最有可能)、LOCAL SERVICE 或 NETWORK SERVICE。因此,如果服务在 SYSTEM 帐户下运行,则从该服务启动的所有内容都将继承该帐户。无论如何,您的服务必须被允许与桌面交互。
总而言之,如果您的进程以提升的方式运行,那么从它启动的进程也将以提升的方式运行。
要提升,你必须使用Shell执行 or Shell执行ExWindows API 的功能。如果您正在启动的 .exe 标记为level=requireAdministrator
在其清单中,shell 将显示 UAC 对话框。如果没有标记,您可以使用runas
强制 UAC 确认对话框的动词/操作。笔记:runas
在 Windows XP 上将显示“以其他用户身份运行”对话框。
If Runtime.getRuntime().exec(command)
通过 ShellExecute 实现,然后用适当的清单标记 .exe 即可工作;如果exec
uses 创建进程,该进程将以当前用户权限启动,即不提升;此外,如果 .exe 有,则该进程根本不会启动requireAdministrator
在其清单中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)