不装 VS 自己编译安装 Windows Terminal

Windows Terminal 一直没有发布可以直接安装的二进制文件,想自行编译的时候,看到系统需求中包含体积巨大的 Visual Studio 和 Windows SDK,脑袋都大了。直接下载其他人编译好的安装包又不放心,那么就想个办法避免在本地环境编译吧。

1. 编译结果获取

首先想到 Azure DevOps,这个可以简单理解成微软提供的在线 CI 平台,写好编译文件就可以调用微软的自带所有编译环境的镜像直接在线编译,并生成二进制下载。这个服务可以使用 edu 教育账号免费使用,有 edu 邮箱的都可以用。我曾经使用这个编译过其他人久不更新的 MFC 项目。自己写一个 ,或者修改微软生成的 azure-pipelines.yml 即可。

640?wx_fmt=png

那么就从 GitHub 上把微软的代码拿过来,再写个 pipeline 直接编译吧。这时注意到,GitHub 上的项目中,居然已经包含了写好的 pipeline。

640?wx_fmt=png

想了想,微软写的东西当然自己也会用 Azure DevOps 啊。

接下来注意到,在 GitHub 仓库的 Readme 中,已经有 Azure Pipelines 的编译结果图标了。

640?wx_fmt=png

单击图标,打开软的 DevOps 仓库,可见每次 push 代码都是会自动编译的。进一步分析发现,只有合并到 master 分支时会编译出二进制文件。

640?wx_fmt=png

那么我们选择其中一个 master 分支的 CI job:

640?wx_fmt=png

可以看到,右上角有 Artifacts 按钮,说明这个 CI 是会上传编译出来的二进制文件到服务器的。不清楚这三个有什么区别,我起初以为分别对应 x64、x86 和 arm64 的编译结果,但我下载第一个压缩包中,是包含了三个平台的编译结果的。压缩包很大,150多M,内容如下:

640?wx_fmt=png

其中的 CascadiaPackage_0.0.1.0_x64.msix 就是我们要的二进制安装包。

2. 安装尝试

首先把系统调成开发者模式。

640?wx_fmt=png

然后双击 msix 文件直接安装,发现安装失败,提示安装包没有签名。

640?wx_fmt=png

一番搜索之后,发现如果使用 VS 在本机直接部署,VS 会自动帮你签名。如果使用 VS 命令行工具直接编译出来的结果,是没有签名的。

在 GitHub 仓库的一个 issue (https://github.com/microsoft/Terminal/issues/489#issuecomment-496170540)中有人提到,需要用 SignTool.exe 来为这个安装包签名。

3. 证书生成

签名首先需要一个证书。在这里我们直接自签发一个证书并添加信任就行了。参考刚才的 issue 中提到的脚本,打开管理员权限的 Power Shell ,并 cd 到 msix 安装包所在目录中,执行如下命令:

New-SelfSignedCertificate -Type Custom -Subject "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" -KeyUsage DigitalSignature -FriendlyName "WindowsTerminal" -CertStoreLocation "Cert:\LocalMachine\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

此时会显示一个证书指纹,复制其中指纹并替换掉下面命令中的 C5C9D98CE9A23FB72C20B4D039876F3D93C3E1FF,同时修改命令中的密码。

  1. $password = ConvertTo-SecureString -String "随便设置一个密码" -Force -AsPlainText

  2. Export-PfxCertificate -cert "Cert:\LocalMachine\My\C5C9D98CE9A23FB72C20B4D039876F3D93C3E1FF" -FilePath WindowsTerminal.pfx -Password $password

  3. Remove-Item -Path "Cert:\LocalMachine\My\C5C9D98CE9A23FB72C20B4D039876F3D93C3E1FF"

此时当前目录会生成一个 WindowsTerminal.pfx 证书。双击之,安装到计算机存储的受信任人(Trusted People)目录中,中间会要你输入刚才脚本里设置的密码。

640?wx_fmt=png

好了,证书搞定了。

4. 提取安装签名工具

下面使用 SignTool.exe 工具进行签名。这个工具是 Windows 10 SDK (https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) 中的一个工具。去微软网站查看发现,这货体积巨大,包含了许多开发 Windows 所需的工具包。但我们并不需要其他的部分,所以这里投机取巧一下,只安装所需的部分。

首先要下载 ISO 格式的安装镜像,不要直接下 Installer。大概 800M 左右,半夜直连下载速度飞快,白天就不行了,视情况使用更加科学的上网方式。

640?wx_fmt=png

下好之后,使用 Windows 自带的 Mount 功能映射为虚拟光驱。打开 Installers 目录,找到 WindowsAppCertificationKitx64-x86_en-us.msi 这个包,双击安装。

640?wx_fmt=png

这个工具包就包含了我们需要的 SignTools.exe ,其他的部分不需要,可以删掉这个镜像了。在 C:\ProgramFiles(x86)\WindowsKits\10\AppCertificationKit\signtool.exe 路径可以找到我们需要的工具。

640?wx_fmt=png

5. 签名安装

在 msix 和证书文件所在目录打开 cmd,执行以下命令完成签名:

  1. "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /fd SHA256 /a /f WindowsTerminal.pfx /p 你的密码 CascadiaPackage_0.0.1.0_x64.msix

签好后再双击 msix 包,就可以顺利安装了。

640?wx_fmt=png

Enjoy!

640?wx_fmt=png


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

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

相关文章

Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 期望dp

传送门 文章目录题意:思路:题意: 要从111走到nnn,每次成功走下去的概率为pi100\frac{p_i}{100}100pi​​,如果不成功那就回到111号点继续走。问走完nnn个点的期望是多少。 思路: 以前见过这种失败了就回…

带你了解C#每个版本新特性

上学时学习C#和.NET,当时网上的资源不像现在这样丰富,所以去电脑城买了张盗版的VS2005的光盘,安装时才发现是VS2003,当时有一种被坑的感觉,但也正是如此,让我有了一个完整的.NET的学习生涯。一直都认为学习…

Educational Codeforces Round 106 (Rated for Div. 2) D. The Number of Pairs 数论gcd

传送门 文章目录题意:思路:题意: 给三个数c,d,xc,d,xc,d,x,求满足c∗lcm(a,b)−d∗gcd(a,b)xc*lcm(a,b)-d*gcd(a,b)xc∗lcm(a,b)−d∗gcd(a,b)x条件的(a,b)(a,b)(a,b)的数量。 思路: 考虑将lcm(a,b)lcm(a,b)lcm(a,b…

从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)

默认情况下,我们打包 NuGet 包时,目标项目安装我们的 NuGet 包会引用我们生成的库文件(dll)。除此之外,我们也可以专门做 NuGet 工具包,还可以做 NuGet 源代码包。然而做源代码包可能是其中最困难的一种了&…

HDU - 4497 GCD and LCM 数论gcd

传送门 文章目录题意:思路:题意: 给三个数的lcmlcmlcm和gcdgcdgcd,求满足条件的三元组组合个数。 思路: 首先lcmmodgcd0lcm\bmod gcd0lcmmodgcd0是有组合的条件,否则输出0。 现在可知lcm(x′,y′,z′)lc…

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版。针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的博文进行了详细的介绍。具体的可以点这里进行阅读译 | .NET Core 3.0 Preview 6 已发布。而我们这篇文章将会介绍本次更新中对ASP.NET Core和…

Codeforces Round #686 (Div. 3) F. Array Partition 二分 + 线段树

传送门 文章目录题意:思路:题意: 化简一下题意就是求满足max(1,x)min(x1,y)max(y1,n)max(1,x)min(x1,y)max(y1,n)max(1,x)min(x1,y)max(y1,n)的len1x,len2y−x,len3n−ylen1x,len2y-x,len3n-ylen1x,len2y−x,len3n−y。 思路: …

Dapper.Common基于Dapper的开源LINQ超轻量扩展

Dapper.CommonDapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则、链式调用、配置简单、上手快,支持Mysql,Sqlserver(目前只实现了这两个数据库,实现其他数据库也很轻松),支持单表,多表,自定义函数等功能。源码…

Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥

传送门 文章目录题意:思路:题意: 给你一颗基环树,求长度>1>1>1的路径个数。 思路: 先考虑一棵树,他的答案显然是n∗(n−1)2\frac{n*(n-1)}{2}2n∗(n−1)​。因为是个基环树,所以先考…

.NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖

我们有多种工具可以将程序集合并成为一个。比如 ILMerge、Mono.Merge。前者不可定制、运行缓慢、消耗资源(不过好消息是现在开源了);后者已被弃用、不受支持且基于旧版本的 Mono.Cecil。而本文介绍用来替代它们的 ILRepack,使用 I…

4G的小程序与5G的Chromium OS?

提到桌面操作系统,Windows 与 macOS 自然是家喻户晓,稍微有点 IT 知识的人也会知道 Linux,而 Fuchsia 和鸿蒙(方舟)则还在积极开发中,除了这几大类比较热门的,当前还有一大潜力股 Chrome OS&…

Codefest 18 (rated, Div. 1 + Div. 2)-D-Valid BFS--思维--已知bfs序,求是否正确

Codefest 18 (rated, Div. 1 Div. 2)-D-Valid BFSvj地址 题意:给你一段bfs序列,让你判断是否正确 思路:先给节点排序(很关键) 我们给每一个的点的邻接表按照给出的bfs序列排序,排好后, 我跑一…

P3605 [USACO17JAN]Promotion Counting P dfs序

传送门 文章目录题意:思路:题意: 思路: 这个题可以用各种姿势a掉,树启和线段树合并都可以,比较无脑。下面给一个解决这种问题比较巧妙的做法。 考虑暴力怎么写,我们先将每个点的权值离散化一下…

推荐VSCode多语言开发,支持一键JAVA

哈喽大家周一好!好久不见鸭,最近在看一本书,很好,《人类简史》,适合夏日星空,仰观宇宙之大?这个专题是“做贡献”,也是作为软粉,打算一直推广微软自己的东西,上一次还是…

思维--找规律--Codeforces Round #645 (Div. 2) c题

C. Celex Update 题目大意:给出两点的坐标,找出不同的路径的总数(路径数字总和不同) 思路:根据观察向下走比向右走的增加幅度加1,所以在第i步 向下 对sum的影响是 n-i1 所以最小数字为12。。。。y&#xf…

Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) A. Basic Diplomacy

传送门 文章目录题意:思路:题意: 有nnn个小朋友,让后你要在mmm天中每天都选择一个小朋友,给出这mmm天都可以选哪个小朋友,每个小朋友选的次数不超过⌈m2⌉\left \lceil \frac{m}{2} \right \rceil⌈2m​⌉…

分布式Redis的分布式锁 Redlock

引言之前自己在用redis来实现分布式锁的时候都是基于单个Redis实例,也就是说Redis本身是有单点故障的,Redis的官方文档介绍了一种"自认为"合理的算法,Redlock来实现分布式Redis下的分布式锁。Martin Kleppmann写了一篇文章分析Redl…

双指针--Codeforces Round #645 (Div. 2) d题

D. The Best Vacation 题目大意&#xff1a; 算出连续x天最多的拥抱&#xff0c;一个月第i号就有i个拥抱 思路&#xff1a;双指针&#xff0c;扫描过去&#xff08;每个月每个月的计算&#xff0c;最后超出的部分再一天一天算&#xff09; 代码 &#xff1a; #include<cstd…

Educational Codeforces Round 106 (Rated for Div. 2) C. Minimum Grid Path 奇偶 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给一个二维平面&#xff0c;起点在(0,0)(0,0)(0,0)&#xff0c;终点在(n,n)(n,n)(n,n)&#xff0c;每次只能往上和往右走&#xff0c;距离随意&#xff0c;总步数不超过nnn&#xff0c;每一步有一个代价cic_…

从CLR GC到CoreCLR GC看.NET Core对云原生的支持

内存分配概要前段时间在园子里看到有人提到了GC学习的重要性&#xff0c;很赞同他的观点。充分了解GC可以帮助我们更好的认识.NET的设计以及为何在云原生开发中.NET Core会占有更大的优势&#xff0c;这也是一个程序员成长到更高层次所需要经历的过程。在认识GC的过程中&#x…