本文介绍使用桌面渲染保持-本地方式过程中的常见问题和处理方式。
配置console会话下的分辨率
本章节以ECS为例介绍如何设置默认的分辨率并进行验证。
通过修改Windows 注册表信息设置默认分辨率
本章节提供一个可选方案,不能保证在所有情况下都有效。
使用
快捷键Win+R或命令行工具中,输入regedit;在注册表中找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\MSBDD_NOEDID_1234_1111_00000000_00020000_00^E3701873EC28AFCFF631E725354CDC2D\00

可以看到PrimSurfSize.cx, PrimSurfSize.cy的默认值是1024和768
例如分辨率需要修改为1280*1024,则改为PrimSurfSize.cx=1280, PrimSurfSize.cy=1024。注意修改时需要选择“十进制”,如下图所示

验证console会话下的分辨率和缩放
在虚拟机中以Windows console会话下运行时,由于不能直接查看到分辨率等,因此可以借助调用RPA应用进行获取信息。
使用编码开发模式,工程代码如下,并发布为RPA应用(例如 get_current_resolution_dpi)
from rpa.core import * from rpa.utils import * import rpa4 as rpa import win32gui import win32print import subprocess def start(): # 查询当前会话类型 r = subprocess.run("query user",capture_output=True,encoding="gbk") rpa.console.logger.info(r.stdout) # 查询当前分辨率和缩放 horzres = win32print.GetDeviceCaps(win32gui.GetDC(0), 8) vertres = win32print.GetDeviceCaps(win32gui.GetDC(0), 10) dpi = win32print.GetDeviceCaps(win32gui.GetDC(0), 88) rpa.console.logger.info("Resolution:{}/{} DPI:{} Scale:{}%".format(horzres,vertres,dpi,round(dpi/96*100)))在此虚拟机中安装本地型机器人,并完成登录,同时需要打开可调度。
在控制台的“本地型机器人-机器人监控”菜单中,设置此机器人的桌面渲染保持=本地方式,更多详见 本地方式。
在控制台的“本地型机器人-计划任务管理-定时任务”菜单中,新建定时任务,主要配置如下
配置项
设置内容
执行的应用
选择 get_current_resolution_dpi
机器人
选中机器人,并开启“桌面渲染保持”,如图所示

定时
选择“立即执行”
待执行完毕后,可在任务的运行日志中查看到console会话下的分辨率和缩放

设置切换console会话所需的Windows权限
建议在Windows的Administrator用户下运行机器人,可跳过本章阅读。
本章主要介绍对非Administrator用户进行权限配置、排查问题。
设置Windows用户的权限
查看当前Windows用户。
使用
快捷键Win+R或命令行工具中,输入compmgmt.msc;在左侧导航栏展开 系统工具 > 本地用户和组 > 组;
双击
Administrators或对其右键-属性,弹出窗口中可以查看所有成员列表,检查当前Windows用户是否在此组中。
如果当前Windows用户没有在
Administrators组内,则需要添加。重要本步骤需要
Administrator用户操作。使用
快捷键Win+R或命令行工具中,输入compmgmt.msc;在左侧导航栏找到 系统工具 > 本地用户和组 > 组。双击
Administrators或对其右键-属性,在弹出框中添加计划使用的用户。
设置注册表信息。
重要本步骤需要
Administrator用户操作。使用
快捷键Win+R或命令行工具中,输入regedit;检查“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”下的FilterAdministratorToken,需要设置为0。
关闭切换会话时的提醒确认。
重要本步骤需要
Administrator用户操作。使用
快捷键Win+R或命令行工具中,输入compmgmt.msc;在左侧导航栏找到 本地策略 > 安全选项,将“用户账户控制:管理员批准模式中管理员的提升权限提示的行为”改为“不提示,直接提升”。

如果您计划使用的Windows用户已经登录,需要注销后重新登录后生效。
会话切换失败的问题排查
无法切换到console会话的主要原因是Windows用户的权限问题,问题分析和处理过程如下:
分析问题
首先需要确定您的自动化流程需要在桌面渲染的情况下才能运行,并且发现通过定时任务、接口触发等无人值守方式执行时执行报错,报错信息出现“控件查找超时”之类的报错。
在控制台上的“本地型机器人-机器人监控”中,发现机器人所在的会话没有处于console会话状态,详见 本地方式。
分析本地型机器人客户端的日志,查找方式详见 获取所有客户端日志。查看最新的Robot.log文件,如果出现类似如下几种错误信息,则可以确定是因为权限原因造成。
[Error] Execute tscon command failed: System.InvalidOperationException: Execute tscon command error: 无法将 sessionID 2 连接到 sessionname console,错误代码 5 错误[5]:拒绝访问。[Warn] Switch to console failed: 无法将 sessionID 2 连接到 sessionname console,错误代码 5 错误[5]:拒绝访问。[Info] Current user cannot do switch to console action directly.
解决方法
详见 设置Windows用户的权限。

