如果您的Java应用程序作为Windows服务运行,则它很可能在以下系统帐户之一下运行:SYSTEM(最有可能),LOCAL SERVICE或NETWORK
SERVICE。因此,如果该服务在SYSTEM帐户下运行,则从该服务启动的所有内容都将继承该帐户。无论如何,必须允许您的服务与桌面交互。
总而言之,如果您的流程以提升的方式运行,则从其启动的流程也将以提升的方式运行。
要提升,您必须使用Windows API的ShellExecute或ShellExecuteEx函数。如果您要启动的.exe
level=requireAdministrator在其清单中带有标记,则外壳将显示UAC对话框。如果未标记,则可以使用
runas动词/运算来强制执行UAC确认对话框。注意:
runas在Windows
XP上将显示“以其他用户身份运行”对话框。
如果
Runtime.getRuntime().exec(command)是通过ShellExecute实现的,则使用适当的清单标记.exe即可;如果
exec使用CreateProcess,则该进程将以当前用户权限启动,即不提升权限;此外,如果
requireAdministrator清单中存在.exe,则该过程将完全不会启动。



