不装 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,一经查实,立即删除!

相关文章

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

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

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

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

.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和…

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

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

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

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

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

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

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…

分布式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…

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

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

一张图带你了解 Insider Dev Tour 2019中国技术大会

点击阅读原文&#xff0c;前往微软Insider Dev Tour 全球官网

Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给nnn个数&#xff0c;让你构造一个尽可能大的矩阵&#xff0c;其中每个点所在的行和列都不含相等元素。 思路&#xff1a; 假设构造的答案矩阵大小为ababab且a<ba<ba<b&#xff0c;那么我们可以…

.NET项目迁移到.NET Core操作指南

这篇文章&#xff0c;汇集了大量优秀作者写的关于".NET迁移到.NET Core"资料文章以及微软官方教程文档。是我在迁移公司框架项目到.NET Core和.NET Standard时遇到的问题&#xff0c;并将相关资料整理成这篇文章。记录如何一步一步把项目迁移到.NET Core。在此感谢这…

Educational Codeforces Round 88 D. Yet Another Yet Another Task(巧枚举)

cf地址 **题目大意&#xff1a;**一个序列&#xff0c;你可以选择一个子段&#xff0c;要求去掉子段最大值后的和最大&#xff0c;求出这个最大值 **思路&#xff1a;**a[i]的范围比较小&#xff0c;可以通过枚举最大值&#xff0c;再找到最大值可以辐射的区间。经典套路了。…

Codeforces Round #607 (Div. 2) E. Jeremy Bearimy dfs + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你2∗k2*k2∗k个点的一棵树。定义GGG为任选kkk组不同的点&#xff0c;每组点的距离和的最小值。定义BBB为任选kkk组不同的点&#xff0c;每组点的距离和的最大值。让你求出GGG和BBB。 思路&#xff1a; …

EF Core 3 的 40 个中断性变更

为了修复 Entify Framework Core 中许多已发现的缺陷&#xff0c;微软在 EF Core 3 中引入了 40 个中断性变更。我们可以在微软文档中查看完整的中断性变更列表&#xff0c;本文仅列举几个主要的点。客户端查询为了突破 EF Core SQL 生成器的限制&#xff0c;默认只在客户端执行…

Codeforces Round #646 (Div. 2) E(贪心,bfs)

Codeforces Round #646 (Div. 2) E 题目大意&#xff1a; 给一棵树&#xff0c;每个节点有三个权值 A,B,C, (B,C为0或1)&#xff0c;每次你可以花费 A[u] *k的代价让A子树中的任意 k 个节点交换彼此的 B &#xff0c;问让所有节点的 BC 至少花费多少代价。 思路&#xff1a; …

联手微软,Docker公司将推出Docker Desktop for WSL 2

微软最新推出的 WSL 2 在架构方面发生了重大的变化&#xff1a;它提供了一个在轻量级 VM 中运行的真正 Linux 内核。使用真正的 Linux 内核意味着可以在 Windows 上运行 ELF64 Linux 二进制文件。对 Docker 来说绝对是利好消息&#xff0c;因为这意味着 Linux 版本的 Docker 可…