导语

苹果一直在尝试把iPad做成电脑,但效果始终不如真正的PC理想。如果能在iPad上运行PC软件,如完整版的Office,那一定是一种非常理想的方式。我小时候电脑启蒙使用的第一个软件就是Office 97里的Word,这也是第一款引入Office助手(大眼夹)的版本。为了纪念7岁就夭折的大眼夹,我决定让它在22年后的iPad Pro上复活。

(图 / Office 2010 the Movie)

其实 iPad 的系统不可能跑Office 97,最接近 native 的方式是采用 RDS 里的 RemoteApp。Azure 在5年前曾经推出过云端托管的 RemoteApp 服务,但后来retire了。官方文档中的一个迁移方式,即使用 IaaS VM 自己配置 RDS,就是本文要介绍的内容。

Remote Desktop vs RemoteApp

Windows 远程桌面(Remote Desktop / RDP)历史悠久,相信大家已经足够熟悉。近年来随着微软突然开放,安卓、iOS也都有了官方的RDP客户端。想要在iPad上跑 Office 97 其实用 RDP 绝对可以,并且最方便。那什么是 RemoteApp 又为啥要用 RemoteApp 呢?

RemoteApp 其实是 Remote Desktop 的进一步“封装”,即不提供完整的桌面环境,只远程渲染你所使用的应用UI,用户看不见 Windows 的其他界面,如任务栏、桌面等,只能使用IT管理员分配的指定应用,以提高安全可控性,并易于管理。比如,用户的客户端(Windows、安卓、iOS)上并没有安装某企业软件,也可能用户临时用了他人的设备,不适合安装该软件。那么就可以通过 RemoteApp,在当前设备上使用服务器端安装的该软件,整个过程均为加密通讯,并且数据不保存在客户端。而用户也无法操作服务器上的完整桌面,保证了安全性。RemoteApp 还有个好处,即窗口看上去就像本地的native应用一样,可以到处拖动、最小化、换屏幕等等,对于用户的体验也好于完整版 Remote Desktop。因此我选择用 RemoteApp 来跑Office 97。

RDS 环境

Remote Desktop Service(RDS)是Windows Server上的一个服务角色,其中包含了本文要用的RemoteApp。相比点点鼠标就1分钟开通RDP,RDS的配置比较复杂。它需要多台服务器才能完成配置。

一个典型的部署结构为:一台 Active Directory 域控(DC)、一台RDS网关(Gateway)、一台Broker、一台或多台运行实际应用的Host服务器。要让用户安全使用RDS服务,还需要购买正规的SSL证书。整个过程相当蛮烦,很容易配进ICU。

在Azure上配置RDS

像我这种只会点鼠标拖控件的 .NET 程序员,没有经过专业的IT培训,绝对搞不定纯手工的RDS配置。还好微软智能云 Azure 提供了一键全自动部署RDS的ARM模板,不需要996就可以傻瓜化完成RDS的安装。

什么是 ARM 模板

Azure Resource Manager (ARM) 模板用于将资源通过编程方式部署到资源组中。ARM 为 Azure 提供完整的基础结构作为代码功能。该格式非常灵活,支持配置多个资源以及它们之间的依赖关系。

用人话来说,就是对于一个复杂的配置,可以将配置要求和步骤用代码的形式写下来,把参数暴露给用户,然后通过点鼠标或者程序实现自动化部署,此过程中用户只需要知道自己需要的参数值,而不需要关心环境如何安装和配置等底层细节,Azure 能自动搞定一切。ARM 模板可以用社区和微软提供的,也可以自己写模板给别人用。

部署 RDS ARM 模板

在Azure应用商店中找到“Remote Desktop Services (RDS) Deployment”(https://azuremarketplace.microsoft.com/en-us/marketplace/apps/rds.remote-desktop-services-basic-deployment?tab=Overview),点击“Get it now”,跳转到你的 Azure Portal 进行部署。

在 Basics 中设置服务器管理员的用户名、密码,这个用户将被加入AD,用于配置所有服务器上的后续设置。建议创建一个独立的 Resource group 用于管理整套 RDS 资源。

在 DNS name label 中指定一个域名前缀,该域名最终用来给终端用户连接 RemoteApp 时使用。AD domain name指定为你的域名,此处可以任意。如果你是个土豪,有证书条件,也能指定一个真实的域名。

对国内用户来说,Azure VM 的计费昂贵,为了不沦落街头,建议把 RDSH 服务器数量改成1台。其他配置保持默认。

最后确认参数正确后,进行一键部署。

整个部署过程大约持续1小时,可以随时在部署信息里看到进度。

部署完成后,在 Azure 里能够看见4台VM。分别是:

advm: Active Directory 域控(具有公网IP)

cb-vm: 连接broker(内网IP)

gw-vm: RDS网关(公网IP+公网域名)

rdsh-0: 应用托管服务器(内网IP)

至此,Azure 能帮我们全自动做的事情就完成了,接下来需要我们手工完成剩余配置。

设置RDS服务器组

使用公网IP以及之前配置的管理员账号RDP到advm,然后在“Add roles and features/Features”下面,勾选“AD DS Tools”以及“AD LDS Snap-Ins and Command-Line Tools”,并完成安装。

现在 Tools 菜单里就能找到“Active Directory Users and Computers”,点击进入。

Computers 里能够看见其余3台服务器,证明DC到其他服务器的连接正常。

Users 下,创建一个用户,如edi-rds.com\ninja.cat,该用户为最终用户运行 RemoteApp 使用的身份。

至此,advm 的配置全部完成。

接下来我们要配置RDS网管服务器(gw-vm)。使用域中(一定要带edi-rds.com域名)的管理员账户连接到gw-vm。

这一步相当重要!虽然不带域名的管理员账号也能登录,但没有RDS配置权限。

选择Manage – Add Servers

将 rdsh-0 以及 broker 加入右边的服务器列表

All Servers 中等待 broker rdsh-0 上线。Performance counters无所谓是否启用。

现在,Remote Desktop Services Overview 里应该能看见完整的部署结构

回到自己的计算机上,用浏览器访问RDS网关服务器,格式为:

https://RDS网关公网IP或域名/RDWeb

由于我们没有配置证书,所以先暂时忽略安全警告

使用之前在DC上创建的用户账户登录网页端RDS Portal

此时尝试访问默认的远程桌面应用,会发现由于证书不受信任而被拒绝。为了测试目的,我们暂时手工信任此证书。点击 “View certificate …”, “Copy to File…

选择“DER encoded binary X.509 (.CER)”,完成证书导出

导出完成后,在证书文件上右键,选择 “Install Certificate

安装位置选 “Local Machine

安装到 “Trusted Root Certification Authorities

在RDSH-0上安装Office 97

由于 RDSH-0 没有公网IP,因此无法直接从自己的计算机 RDP 到 RDSH-0。因此,我们可以在有公网IP的 gw-vm 里面再次 RDP 到 RDSH-0

使用经典方式安装 Office 97。温馨提示:可以使用 Azure Blob Storage 秒传几百兆的 Office 97 镜像哦~

由于22年后的云端服务器性能非常恐怖,Office 97几秒内就能安装完成

安装完成后,你可以先在服务器上试试Office应用能否正常启动

发布Office 97 RemoteApp

回到 gw-vm,在 Remote Desktop Services / Collections / Desktop Collection / RemoteApp Programs 里,点击 Tasks – Publish RemoteApp Programs

选择你需要的 Office 97 组件,并完成发布

现在,回到自己的计算机上,刷新 RDWeb,应该能看见所有发布的 Office 97 产品。

可以先在自己计算机上测试能否正常使用。

至此,PC和Azure服务器上的配置全部完成。

在iPad上配置RemoteApp客户端

在苹果应用商店里下载微软的“Remote Desktop”应用

添加 https://RDS网关公网IP或域名/RDWeb  为资源

添加 RDWeb 所需账号,点击 Find Feed

点击 Accept 忽略证书警告

此时在主界面能看到所有可用的 RemoteApp,和PC上一样,启动 Word 97 即可使用!

在 iPhone 上也是一样的操作~

参考文档:

https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/rds-in-azure

https://docs.microsoft.com/en-us/remoteapp/remoteapp-migrationoptions

汪宇杰博客

微信号 : ediwangblog

.NET, Azure, Windows

云考古 | Azure 自建 RDS 让 iPad 跑 Office 97相关推荐

  1. rds mysql自建从库_在阿里云ECS上自建RDS(MYSQL)的从库

    废话不多说,直接开搞. 1.新购ECS及安装mysql 略过. 按照之前新增从库的套路在导出数据库时尽然卡住了 导出命令 mysqldump -hrm-2zeu9.mysql.rds.aliyuncs ...

  2. oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...

    开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...

  3. 阿里云企业官网建站标准版、高级版和尊贵版功能区别选择攻略

    阿里云建站云·企业官网标准版.高级版和尊贵版有什么区别?不同版本在会员管理.电商及支付.绑定域名.banner及页面制作等方面有区别:续费价格方面标准版续费980元/年.高级版续费1980元/年.尊贵 ...

  4. 云服务器建站原理_云服务器cvm与建站主机之间的区别

    (文章来源:西部数码) 云服务器cvm与建站主机区别是什么?cvm的英文全拼是CloudVirtualMachine(云虚拟机),所以云服务器cvm是指虚拟云服务器,属于云服务器产品中的一种.而建站主 ...

  5. 云服务器cvm只能弄网站么,云服务器cvm与建站主机区别

    因此,云服务器cvm与建站主机的区别,其实也就是云服务器与虚拟主机之间的区别. 安全可靠性 云服务器cvm基于 新型的虚拟主机现也位于云技术平台,安全稳定性较强.不过,由于CPU.带宽或IP等资源与其 ...

  6. 十年再出发!阿里云智能总裁张建锋演讲全记录

    3月21日,"十年再出发"阿里云峰会于国家会议中心正式召开.阿里云智能总裁张建锋(行癫)携核心管理团队首次悉数亮相,并对阿里云做了全面的战略解读.以下是演讲全文. 张建锋:今天是我 ...

  7. 阿里云智能总裁张建锋:保护客户数据安全是第一原则

    10月19日,阿里云智能总裁张建锋在2021云栖大会再次重申,保护客户数据安全是阿里云第一原则."我们绝对尊重用户的数据归属权和控制权,并严格保障用户的隐私安全,这是阿里云最重要的基石.&q ...

  8. 【2020】六家云厂商价格比较:AWS、阿里云、Azure、Google Cloud、华为云、腾讯云

    [2020]六家云厂商价格比较:AWS.阿里云.Azure.Google Cloud.华为云.腾讯云 https://zhuanlan.zhihu.com/p/148856264 去年8月,我们选择了 ...

  9. 【2020新版】六家云厂商价格比较:AWS、阿里云、Azure、Google Cloud、华为云、腾讯云

    [2020新版]六家云厂商价格比较:AWS.阿里云.Azure.Google Cloud.华为云.腾讯云 去年8月,我们选择了国内外六家云厂商做了份资源价格报告,将近一年过去了,我们上个新. 做事呢, ...

最新文章

  1. magento模板区块--首页content区块
  2. GitHub怎样fork别人代码到自己仓库并进行贡献
  3. JS怎么刷新当前页面
  4. SpringMVC+ZTree实现树形菜单权限配置
  5. 简述python中面向对象的概念_简述Python中的面向对象编程的概念
  6. MVC4将Controller与views分开
  7. Android之实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果
  8. 非结构化WEB数据库与图书馆多媒体信息资源的组织利用
  9. Vue执行动画(transition)
  10. mysql-优化班学习-8-20170606-MySQL索引
  11. 微软披露首个由中国发现的蠕虫级漏洞 奇安信代码安全实验室获致谢
  12. 【李宏毅2020 ML/DL】P118 RL - Model-based, Meta, Multi-agent, Alpha
  13. 物质之学 —— 金属
  14. Linux下c语言实现通讯录,学生通讯录管理系统linux下C语言
  15. 面试官问:MySQL锁与事物隔离级别你知道吗?
  16. CSS3中的伪元素选择器与scss
  17. 音乐平台程序源码分享
  18. C语言计算机二级(考点)
  19. Python实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False。通过调用isPrime()函数,打印200以内的所有质数,以空格分割。
  20. 中国智慧停车市场运营调研及投资前景方向预测报告2022年版

热门文章

  1. 个人电脑的楷模:新款IMac G5
  2. 在Windows 7 Media Center中创建音乐播放列表
  3. 使用CEOP增强的Internet Explorer 8帮助保护您的孩子
  4. 如何将多个Android Wear手表与单个手机配对
  5. 福州大学计算机学院董晨老师,福州大学代表队高分斩获第三届福建省高校网络空间安全大赛冠军...
  6. 深入剖析Redis系列(五) - Redis数据结构之字符串
  7. python基础===PEP网站,代码规范指南
  8. NHibernate之旅(7):初探NHibernate中的并发控制
  9. MySQL备份原理详解
  10. Netty之有效规避内存泄漏