gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:14:31 27 4
gpt4 key购买 nike

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

最佳答案

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

总而言之,如果您的进程以提升的方式运行,那么从它启动的进程也将以提升的方式运行。


要提升,你必须使用ShellExecuteShellExecuteEx Windows API 的函数。如果您正在启动的 .exe 在其 list 中标有 level=requireAdministrator,则 shell 将显示 UAC 对话框。如果没有标记,你可以使用runas动词/操作强制UAC确认对话框。注意:Windows XP 上的 runas 将显示“以其他用户身份运行”对话框。

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

关于java getRuntime().exec 一个需要 UAC 的 exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com