引
你是否有想过单独隔离一些你并不信任的软件到虚拟机中,但又因为感觉虚拟机来回切换页面不方便 / 只有一个显示器放不下两个系统的桌面而苦恼?我前段时间研究了下发现有一个解决方案还算完美,能让在虚拟机内的软件在实体机系统内有着类原生的体验。
Microsoft RemoteApp 是微软在 Windows Server 服务器系统上推出的解决方案,允许用户跨设备、跨操作系统的使用 Windows 软件,应用程序的本体和缓存目录全部存在于服务器上,但是却能做到类原生应用的体验。看到这里也不难看出这是一套企业解决方案,微软也确实没把这套解决方案下放到 PC 操作系统上,而在 Windows Server 上配置 RA 需要进行比较复杂的域配置,但是由于其是 Based on RDP 的,并不是什么复杂的完全闭源的私有协议,所以我们可以利用一款开源的软件 RemoteApp Tool 实现这一体验。
操作
创建虚拟机
这一步应该无需太多解释,创建一个虚拟机即可,如果只是放几个聊天软件啥的,内存 8GB 就够了,建议的 Windows 版本为 Windows 10 LTSC 或 Windows 10 Pro 22H2 (Edu/Workstation 也可以)。
配置虚拟机系统的时候建议断网,创建本地帐号;
不要使用 Windows 11 否则你会变的不幸
覆盖 RDP 配置以支持多用户登录
(可选,若只自己使用则不需要)
前往 Github 下载 stascorp/rdpwrap
的最新版本,解压缩后以管理员权限运行 install.bat
, 这个脚本会在配置完成后自动重启 RDP,如果 Hyper-V 的虚拟机连接被断开,重新开启即可。
随后以管理员权限开启 RDPConf.exe
,如果此处全绿的话进行下一步,如果不是的话说明 rdpwrap 默认的配置文件无法破解掉当前系统版本的 DLL 文件,需要升级 rdpwrap.ini
文件:
打开 sebaxakerhtc/rdpwrap.ini
下载最新版本,覆盖 rdpwrap
根目录的 rdpwrap.ini,然后重新管理员权限运行 RDPConf.exe
。
RDPConf.exe
全绿配置 FRP
因为虚拟机并没有取得独立IP,所以需要在你家的 NAS 或 PC 上开启一个 FRP 服务端 (FRPS),在 https://github.com/fatedier/frp 下载配置文件后分别解压到虚拟机和服务端,编辑配置文件 frps.ini
,保存后启动。
[common]
bind_addr = 0.0.0.0
bind_port = 7000
# Virtual host configuration
# vhost_http_port = 8080
# vhost_https_port = 8443
# vhost_udp_port = 13389
//如果用NAS的话可以直接用3389端口,这里用13389是防止和PC冲突,保存配置文件时这行注释需要删掉
# Dashboard configuration
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = <id>
dashboard_pwd = <passwd>
# logs
log_file = ./frps.log
log_level = info
log_max_days = 3
# auth token
token = <auth_token>
max_pool_count = 5
max_ports_per_client = 0
authentication_timeout = 900
tcp_mux = true
然后在虚拟机内编辑 frpc.ini
,如下,保存后启动
[common]
server_addr = <NAS或PC的IP>
server_port = 7000
token = <auth_token>
pool_count = 5
tcp_mux = true
user = your_name
login_fail_exit = true
protocol = tcp
dns_server = 8.8.8.8
[rdp]
type = udp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 13389
[rdp_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 13389
配置 RemoteApp
管理员权限打开 RemoteApp Tool
,左下角选择程序的主文件(非快捷方式),例如我这里添加了 Edge 作为演示的软件 C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
,然后单击 RemoteApp 列表的 Edge 图标,点击右下角 Create Client Connection,在地址那里全部填写 FRPS 服务端的设备 IP 即可,比如我的服务器在内网中是 10.10.1.1,映射的 RDP 端口 13389,然后单击 Create 保存配置文件,把配置文件复制到实体机;配置文件内容如下图所示,双击即可运行。
至此你就可以正常的使用 RemoteApp 了,但是还有两个问题,一个是由于系统限制,状态栏(不是任务栏,而是在任务栏右侧显示的那些小图标)上的图标无法点开,一个是 FRP 没有后台运行也没有开机自启,解决方法如下。
完善打开方式
先说任务栏图标,这个无解,但是你可以把远程应用 RDP 配置文件命名成一个你记得住的名字,然后用 Listary 或 Fluent Search 这样的快捷搜索软件设置好快捷点,输入软件名直接打开,效果如下。
我为了让搜索时候显示图标,设置了一个图标为软件 icon 的快捷方式指向配置文件,效果如左图,如果你懒得设置的话,又是右图那种效果。实际体验都一样,毕竟你又不天天盯着搜索页面看;任务栏上和状态栏里显示的图标是正常的,无需单独设置。
FRP 开机自启
新建一个 vbs 文件,命名为 frp.vbs,内容如下(盘符为小写,替换成你自己的 frp 文件位置),然后把这个文件复制到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
即可;这个是 frpc
(虚拟机内) 的,如果是 frps
(NAS或PC上的服务端),把配置文件中的 frpc
替换为 frps
即可(注意 exe 和 ini 都要换)。
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "c:\FILES\frp_0.45.0_windows_amd64\frpc.exe -c c:\FILES\frp_0.45.0_windows_amd64\frpc.ini",0
一些建议
- 建议把虚拟机的 Windows Explorer (文件资源管理器) 和 RemoteApp Tools 面板,以及你常用的浏览器、代理软件都制作成 Remote App,方便管理虚拟机内的资源。
其中前两者路径一般为C:\Windows\explorer.exe
C:\Program Files (x86)\RemoteApp Tool\RemoteApp Tool.exe
结语
我自己用这套方案已经两个月了,平时用起来很舒服,几乎就是原生应用的体验,最近终于有时间把教程写出来了,希望大家可以保护好自己的隐私。
如果你在操作过程中遇到了什么问题的话,欢迎写 Email 给我 ( [email protected] ),或直接去使用到的几个开源项目的 Repo 提 issue。
本期使用到的开源项目列表