用RemoteApp访问虚拟机中的应用

上一篇文章中,我分析了在隔离环境中运行应用的多种方法。在我的生活中,我需要将一些不可信应用放在 Hyper-V 虚拟机中运行。但是这样做会导致我在工作时需要频繁地在本地和远程桌面之间切换,而且可能收不到虚拟机内的通知。因此,我希望能够在保持隔离的同时获得与本地应用几乎相同的体验。

RemoteApp 是微软基于远程桌面开发的软件。相比于后者将整个桌面绘制出来,RemoteApp 仅仅绘制一个应用的界面,应用会出现在本地的任务栏和托盘,使用本地的通知中心进行推送,提供了与本地应用几乎相同的体验。在这篇文章中,我将介绍如何使用 RemoteApp 访问虚拟机中的应用。

期望的效果

我是在查看 Azure Virtual Desktop 时发现这个功能的。这是他们的介绍视频,效果展示在2:43处:

这个功能完全满足我的要求,但是国内访问 Azure 有一定延迟,我希望能在本地的 Hyper-V 虚拟机里部署这个功能。于是我开始搜索相关资料,发现已经有人这么做了:

使用 RemoteApp 远程运行 QQ - V2EXhttps://www.v2ex.com/t/746542

QQ/腾讯系防扫的最佳解决方法 | remoteapphttps://hostloc.com/thread-1028109-1-1.html

服务端部署

服务器操作系统选择

这一点两篇教程都没有提到,是我自己踩的坑。

我最开始在 Windows Server 2016 上尝试部署,但是连接时始终显示“正在配置远程会话”而无法连接。后来我发现在 Windows Server 2016 上部署 RemoteApp 需要安装 Remote Desktop Services,而这个服务需要服务器加入域。我在服务器上部署了 Active Directory,重启之后就无法连接服务器了。肯定是我哪里操作有问题,但是我懒得去研究了。

因此我选择了 Windows 10 Pro 作为服务器操作系统。这个系统不需要加入域,也不需要安装 Remote Desktop Services,可以直接部署 RemoteApp。

此外,某些版本的 Windows (比如 Windows 10 Home) 不支持 RemoteApp,你可以查看 compatibility chart 来选择支持的服务端系统。

RemoteApp Tool

RemoteApp Tool 是一个开源的工具,可以帮助我们部署 RemoteApp。其操作非常简单,只需要按照教程操作即可。

客户端连接

修改 RDP 文件

我使用的是 Windows 10 Pro 作为客户端,双击 RDP 文件即可连接。但是为了安全性,我们最好在连接前修改一下配置。

用文本编辑器(记事本、VS Code 等)打开生成的 RDP 文件,可以看到下面两行配置:

1
2
redirectcomports:i:1
redirectdrives:i:1

这两行将电脑的 COM 端口和驱动器(硬盘)暴露给了虚拟机,这是我们不希望的。我将其删去并添加配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
audiocapturemode:i:1
audiomode:i:0
camerastoredirect:s:
redirectclipboard:i:1

redirectcomports:i:0
usbdevicestoredirect:s:
devicestoredirect:s:
drivestoredirect:s:
redirectlocation:i:0
redirectprinters:i:0
redirectsmartcards:i:0
redirectwebauthn:i:0

这关闭了硬盘、USB 设备、打印机、摄像头等的重定向,同时打开声音、麦克风、剪贴板的重定向。

你可以修改这些配置来满足你的需求,具体配置可以参考 微软对 RDP 配置文件的文档

图标

默认情况下,生成的 RDP 文件使用的是远程桌面的图标,没有辨识度,如果有多个 RDP 文件,很难区分。我们创建指向 RDP 文件的快捷方式,然后修改快捷方式的图标。最后的效果是这样的:

已知问题

  1. 微信托盘图标没有响应,但是TIM和其他应用不会。应该是微信的问题,我也不知道怎么解决。
  2. WIN10 PRO 的内存占用比 Server 2016 高至少50%,可能导致主机资源不足或者续航降低。有可能 Enterprise LTSC 版本会是更好的选择。
作者

Cao Mingjun

发布于

2022-10-20

更新于

2022-10-20

许可协议

评论