Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions docs/mstsc-feasibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# 研究:在 Avalonia.Controls.WebView 思路下内嵌 mstsc(Remote Desktop ActiveX)可行性

## 1. 项目现状调研(与本议题相关)

基于当前代码,项目已经具备“平台适配器 + NativeControlHost + HWND 重父子关系”的通用能力,关键点如下:

- 统一抽象层:`IWebViewAdapter` / `WebViewAdapter`(`src/Avalonia.Controls.WebView.Core/IWebViewAdapter.cs`、`WebViewAdapter.cs`)
- 宿主承载层:`NativeWebViewControlHost` 通过 `CreateNativeControlCore` 创建并承载原生句柄(`src/Avalonia.Controls.WebView/NativeWebViewControlHost.cs`)
- Windows 下已有两类实现:
- WebView1(WinRT/COM 互操作):`src/Avalonia.Controls.WebView.Core/Win/WebView1/*`
- WebView2(COM 互操作):`src/Avalonia.Controls.WebView.Core/Win/WebView2/*`
- 已有 `SetParent(HWND)`、尺寸同步、事件回调、资源释放等关键流程(如 `WebView1Adapter`、`WebView2BaseAdapter`)

结论:项目在“无 WinForms,直接托管 Windows 原生/COM 控件”方面已有成熟基础,这和 mstsc 控件集成路径是同一技术方向。

## 2. mstsc 相关技术要点

mstsc 可编程能力主要来自 Remote Desktop ActiveX(`mstscax.dll`)及其 COM 接口族(如 `IMsRdpClient*`)。

典型特征:

- 本质是 ActiveX/COM 控件,不是纯托管控件
- 需要 STA 线程与消息循环
- 需要原生窗口宿主(HWND)与 in-place 激活/尺寸/焦点管理
- 事件通过 COM 事件机制回调(连接点模型)

这意味着:若不依赖 WinForms `AxHost`,就需要自己做一层 ActiveX 宿主包装(或复用现有原生封装库)。

## 3. 可行性结论

**可行,但复杂度中到高,建议以 PoC 先行。**

原因:

1. 本项目已经验证了同类能力(COM + HWND + NativeControlHost)
2. mstsc 控件形态与 WebView1/2 不同,但“承载和生命周期管理”方法可复用
3. 真正难点在 ActiveX 宿主细节、输入焦点、安全策略与兼容性,不在 Avalonia 侧

## 4. 关键实现点(建议)

1. **新增独立适配器层(Windows only)**
参考 `Win/WebView1`、`Win/WebView2` 结构,新增 `Win/Rdp` 目录,避免影响现有 WebView 逻辑。

2. **先做最小 PoC**
- 能创建控件并嵌入 `NativeControlHost`
- 能设置服务器地址并连接/断开
- 能稳定响应 resize、focus、dispose

3. **线程与生命周期**
- 所有 COM 创建/调用保持在 STA/UI 线程
- 明确释放顺序(事件解绑 -> 断开连接 -> COM 释放)
- 处理异常断连与宿主销毁竞态

4. **输入和窗口行为**
- 焦点切换、快捷键、鼠标捕获、DPI/缩放
- 多显示器和窗口重建(reparent)场景

5. **能力边界**
- 先聚焦“内嵌显示 + 基本连接”
- 高级能力(重定向、网关、高级认证策略)分阶段引入

## 5. 注意事项与风险

- **安全**:凭据处理、证书校验、剪贴板/磁盘重定向策略必须默认安全
- **系统依赖**:功能随 Windows 版本和远程桌面组件能力差异而变化
- **维护成本**:ActiveX/COM 宿主代码可维护性与测试成本明显高于 WebView2
- **测试要求**:需要真实 Windows 环境联调(CI 很难完整覆盖)

## 6. 建议的落地策略

1. 先提交 PoC 分支验证“可嵌入 + 可连接 + 可释放”
2. PoC 通过后再抽象公共接口,并补齐错误处理与安全默认项
3. 最终再评估是否对外公开 API,避免过早承诺全部 mstsc 高级特性