桌面渲染使用本地方式的常见问题

更新时间:
复制为 MD 格式

本文介绍使用桌面渲染保持-本地方式过程中的常见问题和处理方式。

配置console会话下的分辨率

本章节以ECS为例介绍如何设置默认的分辨率并进行验证。

通过修改Windows 注册表信息设置默认分辨率

重要

本章节提供一个可选方案,不能保证在所有情况下都有效。

  1. 使用 快捷键Win+R命令行工具 中,输入 regedit

  2. 在注册表中找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\MSBDD_NOEDID_1234_1111_00000000_00020000_00^E3701873EC28AFCFF631E725354CDC2D\00

    image

  3. 可以看到PrimSurfSize.cx, PrimSurfSize.cy的默认值是1024768

  4. 例如分辨率需要修改为1280*1024,则改为PrimSurfSize.cx=1280, PrimSurfSize.cy=1024。注意修改时需要选择“十进制”,如下图所示

    image

验证console会话下的分辨率和缩放

说明

在虚拟机中以Windows console会话下运行时,由于不能直接查看到分辨率等,因此可以借助调用RPA应用进行获取信息。

  1. 使用编码开发模式,工程代码如下,并发布为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)))
  2. 在此虚拟机中安装本地型机器人,并完成登录,同时需要打开可调度。

  3. 在控制台的“本地型机器人-机器人监控”菜单中,设置此机器人的桌面渲染保持=本地方式,更多详见 本地方式

  4. 在控制台的“本地型机器人-计划任务管理-定时任务”菜单中,新建定时任务,主要配置如下

    配置项

    设置内容

    执行的应用

    选择 get_current_resolution_dpi

    机器人

    选中机器人,并开启“桌面渲染保持”,如图所示

    image

    定时

    选择“立即执行”

  5. 待执行完毕后,可在任务的运行日志中查看到console会话下的分辨率和缩放

    image

设置切换console会话所需的Windows权限

重要

建议在WindowsAdministrator用户下运行机器人,可跳过本章阅读。

说明

本章主要介绍对非Administrator用户进行权限配置、排查问题。

设置Windows用户的权限

  1. 查看当前Windows用户。

    1. 使用 快捷键Win+R命令行工具 中,输入 compmgmt.msc

    2. 在左侧导航栏展开 系统工具 > 本地用户和组 > 组;

    3. 双击 Administrators 或对其右键-属性,弹出窗口中可以查看所有成员列表,检查当前Windows用户是否在此组中。

      image

  2. 如果当前Windows用户没有在Administrators组内,则需要添加。

    重要

    本步骤需要 Administrator用户 操作。

    1. 使用 快捷键Win+R命令行工具 中,输入 compmgmt.msc

    2. 在左侧导航栏找到 系统工具 > 本地用户和组 > 组。双击 Administrators 或对其右键-属性,在弹出框中添加计划使用的用户。

      image

  3. 设置注册表信息。

    重要

    本步骤需要 Administrator用户 操作。

    1. 使用 快捷键Win+R命令行工具 中,输入 regedit

    2. 检查“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”下的FilterAdministratorToken,需要设置为0。

  4. 关闭切换会话时的提醒确认。

    重要

    本步骤需要 Administrator用户 操作。

    1. 使用 快捷键Win+R命令行工具 中,输入 compmgmt.msc

    2. 在左侧导航栏找到 本地策略 > 安全选项,将“用户账户控制:管理员批准模式中管理员的提升权限提示的行为”改为“不提示,直接提升”。

      image

  5. 如果您计划使用的Windows用户已经登录,需要注销后重新登录后生效。

会话切换失败的问题排查

无法切换到console会话的主要原因是Windows用户的权限问题,问题分析和处理过程如下:

分析问题

  1. 首先需要确定您的自动化流程需要在桌面渲染的情况下才能运行,并且发现通过定时任务、接口触发等无人值守方式执行时执行报错,报错信息出现“控件查找超时”之类的报错。

  2. 在控制台上的“本地型机器人-机器人监控”中,发现机器人所在的会话没有处于console会话状态,详见 本地方式

  3. 分析本地型机器人客户端的日志,查找方式详见 获取所有客户端日志。查看最新的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.

解决方法