babalae/better-genshin-impact · error · InvalidOperationException

RDP ActiveX 控件尚未完成初始化,无法访问 COM 实例。

Error message

RDP ActiveX 控件尚未完成初始化,无法访问 COM 实例。

What it means

Error "RDP ActiveX 控件尚未完成初始化,无法访问 COM 实例。" thrown in babalae/better-genshin-impact.

Source

Thrown at BetterGenshinImpact/View/Controls/ChildSession/RdpActiveXHost.cs:570

    }

    private static bool IsNonTerminalLogonEvent(int errorCode)
    {
        // 这些代码表示登录仍在继续或 ActiveX 正在显示可交互选项,不应提前判定连接失败。
        return errorCode is -5 or -4 or -2 or 3;
    }

    private object GetRequiredOcx()
    {
        if (!IsHandleCreated)
        {
            // WindowsFormsHost 在未连接空白态会被折叠,普通 CreateControl() 会因不可见而跳过创建。
            // 读取 Handle 会忽略可见性并强制 AxHost 创建底层窗口及 ActiveX 实例。
            _ = Handle;
        }

        return GetOcx()
               ?? throw new InvalidOperationException(
                   "RDP ActiveX 控件尚未完成初始化,无法访问 COM 实例。");
    }

    private static object? GetComProperty(object target, string propertyName)
    {
        return target.GetType().InvokeMember(
            propertyName,
            BindingFlags.GetProperty,
            binder: null,
            target,
            args: null,
            CultureInfo.InvariantCulture);
    }

    private static void SetComProperty(object target, string propertyName, object value)
    {
        target.GetType().InvokeMember(
            propertyName,

View on GitHub (pinned to a7cb36712d)

Solutions

  1. 等待 RDP ActiveX 控件初始化完成后再操作
  2. 重启桌面分身功能重建控件
  3. 确认系统支持并启用了 RDP ActiveX

Example fix

确认系统存在 mstscax.dll 且未被安全软件拦截;以足够权限运行 BetterGI,必要时重装系统组件。

When it happens

Trigger: GetRequiredOcx 强制创建句柄后 GetOcx() 仍返回 null,即底层 ActiveX/COM 实例不存在时抛出。

Common situations: RDP ActiveX 控件初始化失败(组件缺失、权限不足或创建被安全软件拦截)。


AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13). Data as JSON: /api/errors/e23a4e0624f6b2cb. Report an issue: GitHub.