云考古 | Azure 自建 RDS 让 iPad 跑 Office 97


导语

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

640?wx_fmt=jpeg

(图 / Office 2010 the Movie)

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

640?wx_fmt=jpeg


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 进行部署。

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

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

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

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

640?wx_fmt=png

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

设置RDS服务器组

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

640?wx_fmt=png

选择Manage – Add Servers

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

安装位置选 “Local Machine

640?wx_fmt=png

安装到 “Trusted Root Certification Authorities

640?wx_fmt=png

在RDSH-0上安装Office 97

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

发布Office 97 RemoteApp

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

在iPad上配置RemoteApp客户端


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

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

640?wx_fmt=png

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

640?wx_fmt=png

点击 Accept 忽略证书警告

640?wx_fmt=png

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

640?wx_fmt=png640?wx_fmt=png

在 iPhone 上也是一样的操作~

640?wx_fmt=png


参考文档:

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

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


640?wx_fmt=jpeg

640?wx_fmt=png

汪宇杰博客

微信号 : ediwangblog

.NET, Azure, Windows



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3338 [ZJOI2014]力 FFT + 推式子

传送门 文章目录题意:思路:题意: 思路: 这个式子看起来很FFTFFTFFT,让我们来化简一下。 考虑EEE中直接将qiq_iqi​约掉,所以Ei∑j1i−1qj(i−j)2−∑ji1nqj(i−j)2E_i\sum_{j1}^{i-1}\frac{q_j}{(i-j)^2}-…

DevOps案例研究:庖丁解牛,剖析Google持续交付之道

内容来源:DevOps案例深度研究 –Google持续交付实践战队(本文只展示部分PPT及研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:姚元庆 (Topic Leader) 、任跃兵、王红阳、王晓敏、张彪本…

并查集板子加例题

//http://poj.org/problem?id1611 #include<bits/stdc.h> using namespace std; const int maxn 30010; int f[maxn],num[maxn],n,m; int find(int x) {return f[x] x ? x : f[x] find(f[x]); } int main() {while(cin >> n >> m && (n m)) {f…

架构杂谈《八》Docker 架构

Docker 架构 一、Docker 引擎的三大组件1&#xff09;Docker 后台服务&#xff08;Docker Daemon&#xff09;&#xff1a;是长时间运行在后台的守护进程&#xff0c;是Docker的核心服务&#xff0c;可以通过命令dockerd与它进行交互通信。2&#xff09;REST 接口&#xff08;R…

P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先可以知道&#xff0c;我们对某个数组加上一个正数数的操作可以转换成对一个数组加上一个任意数&#xff0c;所以我们设变化量为xxx。 对于∑i1n(ai−bi)2\sum_{i1}^n(a_i-b_i)^2i1∑n​…

DijKstra算法普通+堆优化链式向前星

朴素版本 #include<bits/stdc.h> using namespace std; const int maxn 10010; const int inf 0x3f3f3f3f; int a[maxn][maxn],dis[maxn],visit[maxn],n,m,s,t; void init() {for(int i 1; i < n; i)for(int j 1; j < n; j)if(i j) a[i][j] 0;else a[i][j] …

.net core 基于 IHostedService 实现定时任务

.net core 基于 IHostedService 实现定时任务Intro从 .net core 2.0 开始&#xff0c;开始引入 IHostedService&#xff0c;可以通过 IHostedService 来实现后台任务&#xff0c;但是只能在 WebHost 的基础上使用。从 .net core 2.1 开始微软引入通用主机( GenericHost)&#x…

nowcoder 清楚姐姐的翅膀们 F 一般图的最大匹配

传送门 文章目录题意思路&#xff1a;题意 思路&#xff1a; 这个题很容易就会掉到二分图匹配的坑里。。 但实际上这个是一个一般图匹配。 考虑将妹子拆点&#xff0c;一个入点一个出点&#xff0c;入点出点都连蝴蝶结。 我们看看最终会有三种匹配情况&#xff1a; (1)(1)(1)妹…

快速幂、乘法取模

次方快速幂 #include<iostream> using namespace std; int main() {int a, b, c, ans 1;cin >> a >> b >> c;while(b) {if(b & 1) ans (ans * a) % c;a (a * a) % c;b >> 1;}cout << ans % c << endl;return 0; }乘法取模 …

HDU - 7072 Boring data structure problem 双端队列 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 你需要实现如下四个操作 q≤1e7q\le1e7q≤1e7 思路&#xff1a; 做的时候想了个链表的思路让队友写了&#xff0c;懒。 看了题解感觉题解还是很妙的。 你需要快速插入一个数在前后两端&#xff0c;还需要…

C#中谁最快:结构还是类?

前言在内存当道的日子里&#xff0c;无论什么时候都要考虑这些代码是否会影响程序性能呢&#xff1f;在现在的世界里&#xff0c;几乎不会去考虑用了几百毫秒&#xff0c;可是在特别的场景了&#xff0c;往往这几百毫米确影响了整个项目的快慢。通过了解这两者之间的性能差异&a…

二进制状态压缩DP

描述 给定一张 n 个点的带权无向图&#xff0c;点从 0~n-1 标号&#xff0c;求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。 输入格式 第一行输入整数n。 接下来n行每行n个整数&#xff0c;其中第i行第j个整数表示…

阅读nopcommerce startup源码

创建一个asp.net core项目&#xff0c;可以到到startup类有两个方法// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services)public void Configure(IApplicationBuilder a…

HDU - 7073 Integers Have Friends 2.0 随机化 + 质因子

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个序列aaa&#xff0c;找一个最大的集合&#xff0c;集合中所有元素模mmm相等。 思路&#xff1a; 之前做过一道连续的&#xff0c;直接尺取就好&#xff0c;这个不连续加大了难度。 考虑最简单的…

OpenJudge:熄灯问题

题目链接 大意就是&#xff0c;摁一个开关&#xff0c;它的前后左右以及他自己的状态都会改变。 原本是开的变成关的&#xff0c;原本是关的变成开的。 我们的任务就是把所有的灯都变成关闭状态。 我们可以这样想象&#xff0c;第一排的灯已近摁完了&#xff0c;确实是正确答案…

一份关于.NET Core云原生采用情况调查

调查背景Kubernetes 越来越多地在生产环境中使用&#xff0c;围绕 Kubernetes 的整个生态系统在不断演进&#xff0c;新的工具和解决方案也在持续发布。云原生计算的发展驱动着各个企业转向遵循云原生原则&#xff08;启动速度快、内存占用低&#xff09;的平台&#xff0c; .N…

BBQ Hard dp + 组合数学 + 建模

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 有nnn组物品&#xff0c;每组有aia_iai​个肉和bib_ibi​个菜&#xff0c;你可以选择两组物品让后将肉和菜其串在一根串上&#xff0c;问有多少种不同的串法。 两种方法不同当且仅当选的物品不同或者串的顺序…

差分:最高的牛

最高的牛 有 N 头牛站成一行&#xff0c;被编队为1、2、3…N&#xff0c;每头牛的身高都为整数。 当且仅当两头牛中间的牛身高都比它们矮时&#xff0c;两头牛方可看到对方。 现在&#xff0c;我们只知道其中最高的牛是第 P 头&#xff0c;它的身高是 H &#xff0c;剩余牛的身…

KPI在小型产品团队中的实践

最近公司决定对所有技术人员实行KPI考核&#xff0c;曾经一度非常反感KPI的我也被要求制定产品团队的KPI指标。为什么要实行KPI考核&#xff0c;因为在项目团队和产品团队的管理中出现了问题&#xff1a;不同项目团队的开发人员的工作量饱和度问题&#xff0c;阶段性会出现有的…

HDU - 7084 Pty loves string kmp + fail树 + 主席树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个字符串sss&#xff0c;有qqq个询问&#xff0c;每次给x,yx,yx,y代表取sss的前xxx个字符和后yyy个字符拼接起来得到ttt&#xff0c;输出ttt在sss中出现的次数。 n,q≤2e5n,q\le2e5n,q≤2e5 思路&…