当前位置: 首页 > 面试题库 >

java getRuntime()。exec需要UAC的exe

祁均
2023-03-14
问题内容

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


问题答案:

如果您的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,则该过程将完全不会启动。



 类似资料:
  • 问题内容: 从Bash参考手册中,我得到有关bash内置命令的以下信息: 如果提供了命令,它将替换外壳程序而不创建新进程。 现在,我有以下脚本: 执行此,我得到了: 现在,如果我有此脚本: 我得到以下输出: 我的问题是: 如果在调用 它取代了壳,而无需创建一个新的进程 ,为什么放时,将被打印出来,但是没有它,它不是。因此,如果有人可以解释这种行为的逻辑是什么,我将很高兴。 谢谢。 编辑:@tore

  • 为了方便的确认麦克风和ref的问题,或者配合算法来调试,需要抓取声音 8008 可以配置为标准的 usb 声卡,在 linux 上识别为一个 uac 设备, linux 可以通过 usb 声卡进行声音的采集和声音的播放,录制的格式是单声道, 16K , 16bit 8008 编译的固件需要支持 usb 声卡模式

  • 问题内容: 我已经开始在linux终端中组合不同的命令。我想知道为什么这样的命令需要反斜杠和分号: 当一个简单的cp命令只是: 没有\; 是要清楚地指示命令的结束,还是只是在文档中要求?基本原理是什么? 谢谢! 问题答案: 分号之前反斜杠用于,因为是列表操作符(或之一,),用于分离外壳命令。例如: 该实用程序正在使用或终止由调用的shell命令。 因此,为避免解释特殊的外壳字符,需要使用反斜杠将其

  • 问题内容: 我已经在多个地方多次看到过这种情况,但是从未找到令人满意的解释来说明为什么会这样。 因此,希望这里会介绍一个。为什么我们(至少通常)不使用和? 编辑:我看到人们以为这个问题与Web服务器有关,但事实并非如此。我可以理解为什么传递给未经处理的字符串可能很糟糕。在非Web应用程序中不好吗? 问题答案: 通常有更清晰,更直接的方法来获得相同的效果。如果构建复杂的字符串并将其传递给,则代码将难

  • exec() 方法 用于检索字符串中的正则表达式的匹配。 语法: RegExpObject.exec( string ) 参数说明: string - 要检索的字符串 返回值: 返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。 说明: exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方

  • 描述 (Description) 此函数执行系统命令(直接,不在shell中)并且永​​远不会返回到调用脚本,除非指定的命令不存在且已直接调用,而不是通过shell间接调用。 该操作如下 - 如果只有一个标量参数不包含shell元字符,则该参数将转换为列表,并且该命令将直接执行,而不包含shell。 如果只有一个包含shell元字符的标量参数,那么参数将通过标准shell执行,通常是Unix上的/