编程语言
首页 > 编程语言> > java getRuntime().exec需要UAC的exe

java getRuntime().exec需要UAC的exe

作者:互联网

所以我们有一个作为Windows服务运行的java进程.它需要使用Runtime.getRuntime().exec(command)执行命令.它执行的命令需要UAC.这是在Windows Server 2008上,听起来你无法为单个可执行文件禁用UAC,那么有没有其他方法可以使这个工作?

解决方法:

如果您的Java应用程序作为Windows服务运行,则很可能在其中一个系统帐户下运行:SYSTEM(最可能),LOCAL SERVICE或NETWORK SERVICE.因此,如果服务在SYSTEM帐户下运行,则从服务启动的所有内容都将继承该帐户.无论如何,必须允许您的服务与桌面交互.

总而言之,如果您的流程以提升方式运行,那么从它开始的流程也将升级.

要提升,您必须使用Windows API的ShellExecuteShellExecuteEx功能.如果您启动的.exe在其清单中标有level = requireAdministrator,则shell将显示UAC对话框.如果未标记,则可以使用runas动词/操作强制执行UAC确认对话框.注意:Windows XP上的runas将显示“作为另一个用户运行”对话框.

如果Runtime.getRuntime().exec(command)是通过ShellExecute实现的,那么使用适当的清单标记.exe将起作用;如果exec使用CreateProcess,则将以当前用户权限启动进程,即不提升;此外,如果.exe在其清单中有requireAdministrator,则根本不会启动该进程.

标签:runtime-exec,java,windows,uac,windows-server-2008
来源: https://codeday.me/bug/20191007/1866674.html