You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows11下UIAutomation调用GetText抛出AccessViolationException问题

问题现象

我们基于C#开发了一款应用,通过UIAutomation接口获取Word、OpenOffice、记事本等第三方应用内的当前文本(包含选中文本、光标停留位置的对应词语)。该应用在Windows 10系统(截至检查当日最新21H2版本)上运行完全正常,但收到多位Windows 11用户反馈,应用会无征兆突然闪退。
经调试定位,异常在调用TextPatternRange.GetText()方法时触发,抛出的异常信息如下:

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'
(尝试读取或写入受保护内存,通常为其他内存区域损坏的表征)

已尝试的排查方案
  • 参考微软论坛公开方案,在应用manifest中设置uiaccess=true并完成应用签名,应用安装路径为C:\Program Files\,操作后问题无任何改善;
  • 在上述配置基础上,额外在manifest中将权限级别设置为requireAdministrator,问题仍未解决;
  • 参考第三方软件的同类崩溃反馈,怀疑为Windows 11系统Bug,安装22H2预览版后测试,异常依旧存在。
最小复现代码

为隔离问题、排除应用自身其他逻辑的干扰,我们基于公开可验证的焦点窗口选中文本获取方案编写了测试Demo,核心代码如下:

private void btnRefresh_Click(object sender, RoutedEventArgs e)
{
    var p = Process.GetProcessesByName("notepad").FirstOrDefault();
    var root = AutomationElement.FromHandle(p.MainWindowHandle);

    var documentControl = new
            PropertyCondition(AutomationElement.ControlTypeProperty,
                              ControlType.Document);

    var textPatternAvailable = new PropertyCondition(AutomationElement.IsTextPatternAvailableProperty, true);

    var findControl = new AndCondition(documentControl, textPatternAvailable);

    var targetDocument = root.FindFirst(TreeScope.Descendants, findControl);
    var textPattern = targetDocument.GetCurrentPattern(TextPattern.Pattern) as TextPattern;

    string text = "";
    foreach (var selection in textPattern.GetSelection())
    {
        text += selection.GetText(255);
        Console.WriteLine($"Selection: \"{selection.GetText(255)}\"");
    }

    lblFocusedProcess.Content = p.ProcessName;
    lblSelectedText.Content = text;
}

该Demo逻辑为:点击按钮时触发上述方法,通过UIAutomation获取记事本进程的主窗口,提取其中的选中文本后展示在界面标签中。测试结果显示:该Demo在最新版Windows 10上运行完全正常,即使manifest中不设置uiaccess=true也可正常工作;但在Windows 11上运行时会立即触发AccessViolationException导致崩溃。

待咨询问题与后续计划

目前我们计划向微软官方提交该问题Issue,同时也在考虑申请EV代码签名证书,对应用本体和安装包进行签名(该操作可消除安装时的系统红色安全警告,因本应用为免费分发项目,此前未配置EV签名)。
在此向各位技术开发者咨询以下问题:

  • 该异常的可能诱发原因是什么?
  • Windows 11是否对UIAutomation设置了更严格的权限管控规则?
    后续我们也会持续基于上述复现代码开展测试,如有新的进展会同步更新问题内容。

内容的提问来源于stack exchange,提问作者ygosteli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:57:19