java getRuntime()。exec一个需要UAC的exe

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

Solutions Collecting From Web of "java getRuntime()。exec一个需要UAC的exe"

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

总结一下,如果你的进程运行的是提升的,那么从它开始的进程也会运行。


要升级,您必须使用Windows API的ShellExecute或ShellExecuteEx函数。 如果您启动的.exe文件在其清单中标记为level=requireAdministrator ,则shell将显示UAC对话框。 如果未标记,则可以使用runas verb / operation来强制UAC确认对话框。 注意:Windows XP上的runas将显示“以其他用户身份运行”对话框。

如果Runtime.getRuntime().exec(command)是通过ShellExecute实现的,那么使用适当的清单标记.exe将会工作; 如果exec使用CreateProcess ,则进程将以当前用户权限启动,即不升级; 此外,如果.exe具有需要requireAdministrator的清单,进程将不会被启动。