【发布时间】:2014-11-16 21:20:17
【问题描述】:
我正在使用 Windows 7 上的 java.awt.Robot 在 Java 中使用自定义远程桌面。除了以管理员身份运行命令提示符之外,它都可以正常工作。将出现 UAC 对话框,但是使用 mousePress()/mouseRelease() 的“是”按钮不接受按钮单击,keyPress()/keyRelease() 的按键也不接受。该应用程序是通过 launch4j 启动器在启动器中启动的,而不是包装模式。
到目前为止我做过的事情
为 UAC 禁用安全桌面。这允许应用程序的屏幕抓取器部分至少“看到”提示
- 更改组策略以禁用来自 UAC Group Policy Settings and Registry Key Settings 的 PromptOnSecureDesktop
关注Security Considerations for Assistive Technologies - 这允许远程桌面在启动后与命令提示符进行交互,但不允许按下“是”按钮。
- 向 launch4j 添加了一个清单,指定 uiaccess=true
- 使用使用 makecert.exe 生成的自签名证书使用 signtool.exe 对 .exe 进行签名
- 将证书安装为受信任的根证书
- 已通过右键单击属性、数字签名验证 .exe 被标记为受信任
- 确保 .exe 位于受信任的位置,在本例中为 c:\Program Files (x86)\。
- 试图以管理员身份将应用程序的一部分作为服务运行 - 但是我无法获得以管理员身份运行并允许访问桌面的 Windows 服务 - 似乎只有 LocalSystem 可以这样做...?
问题
- 这最终可能吗?
- 作为 launch4j 包装器的子进程的 javaw.exe 是否会产生影响?我已经阅读了Windows Integrity Mechanism Design,但是我不知道这对 launch4j 有何影响。
Launch4j 清单文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="true" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
【问题讨论】:
标签: java windows-7 uac awtrobot