不装 VS 自己编译安装 Windows Terminal
Windows Terminal 一直沒(méi)有發(fā)布可以直接安裝的二進(jìn)制文件,想自行編譯的時(shí)候,看到系統(tǒng)需求中包含體積巨大的 Visual Studio 和 Windows SDK,腦袋都大了。直接下載其他人編譯好的安裝包又不放心,那么就想個(gè)辦法避免在本地環(huán)境編譯吧。
1. 編譯結(jié)果獲取
首先想到 Azure DevOps,這個(gè)可以簡(jiǎn)單理解成微軟提供的在線 CI 平臺(tái),寫好編譯文件就可以調(diào)用微軟的自帶所有編譯環(huán)境的鏡像直接在線編譯,并生成二進(jìn)制下載。這個(gè)服務(wù)可以使用 edu 教育賬號(hào)免費(fèi)使用,有 edu 郵箱的都可以用。我曾經(jīng)使用這個(gè)編譯過(guò)其他人久不更新的 MFC 項(xiàng)目。自己寫一個(gè) ,或者修改微軟生成的 azure-pipelines.yml 即可。
那么就從 GitHub 上把微軟的代碼拿過(guò)來(lái),再寫個(gè) pipeline 直接編譯吧。這時(shí)注意到,GitHub 上的項(xiàng)目中,居然已經(jīng)包含了寫好的 pipeline。
想了想,微軟寫的東西當(dāng)然自己也會(huì)用 Azure DevOps 啊。
接下來(lái)注意到,在 GitHub 倉(cāng)庫(kù)的 Readme 中,已經(jīng)有 Azure Pipelines 的編譯結(jié)果圖標(biāo)了。
單擊圖標(biāo),打開(kāi)軟的 DevOps 倉(cāng)庫(kù),可見(jiàn)每次 push 代碼都是會(huì)自動(dòng)編譯的。進(jìn)一步分析發(fā)現(xiàn),只有合并到 master 分支時(shí)會(huì)編譯出二進(jìn)制文件。
那么我們選擇其中一個(gè) master 分支的 CI job:
可以看到,右上角有 Artifacts 按鈕,說(shuō)明這個(gè) CI 是會(huì)上傳編譯出來(lái)的二進(jìn)制文件到服務(wù)器的。不清楚這三個(gè)有什么區(qū)別,我起初以為分別對(duì)應(yīng) x64、x86 和 arm64 的編譯結(jié)果,但我下載第一個(gè)壓縮包中,是包含了三個(gè)平臺(tái)的編譯結(jié)果的。壓縮包很大,150多M,內(nèi)容如下:
其中的 CascadiaPackage_0.0.1.0_x64.msix 就是我們要的二進(jìn)制安裝包。
2. 安裝嘗試
首先把系統(tǒng)調(diào)成開(kāi)發(fā)者模式。
然后雙擊 msix 文件直接安裝,發(fā)現(xiàn)安裝失敗,提示安裝包沒(méi)有簽名。
一番搜索之后,發(fā)現(xiàn)如果使用 VS 在本機(jī)直接部署,VS 會(huì)自動(dòng)幫你簽名。如果使用 VS 命令行工具直接編譯出來(lái)的結(jié)果,是沒(méi)有簽名的。
在 GitHub 倉(cāng)庫(kù)的一個(gè) issue?(https://github.com/microsoft/Terminal/issues/489#issuecomment-496170540)中有人提到,需要用 SignTool.exe 來(lái)為這個(gè)安裝包簽名。
3. 證書生成
簽名首先需要一個(gè)證書。在這里我們直接自簽發(fā)一個(gè)證書并添加信任就行了。參考剛才的 issue 中提到的腳本,打開(kāi)管理員權(quán)限的 Power Shell ,并 cd 到 msix 安裝包所在目錄中,執(zhí)行如下命令:
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}")此時(shí)會(huì)顯示一個(gè)證書指紋,復(fù)制其中指紋并替換掉下面命令中的 C5C9D98CE9A23FB72C20B4D039876F3D93C3E1FF,同時(shí)修改命令中的密碼。
$password = ConvertTo-SecureString -String "隨便設(shè)置一個(gè)密碼" -Force -AsPlainText
Export-PfxCertificate -cert "Cert:\LocalMachine\My\C5C9D98CE9A23FB72C20B4D039876F3D93C3E1FF" -FilePath WindowsTerminal.pfx -Password $password
Remove-Item -Path "Cert:\LocalMachine\My\C5C9D98CE9A23FB72C20B4D039876F3D93C3E1FF"
此時(shí)當(dāng)前目錄會(huì)生成一個(gè) WindowsTerminal.pfx 證書。雙擊之,安裝到計(jì)算機(jī)存儲(chǔ)的受信任人(Trusted People)目錄中,中間會(huì)要你輸入剛才腳本里設(shè)置的密碼。
好了,證書搞定了。
4. 提取安裝簽名工具
下面使用 SignTool.exe 工具進(jìn)行簽名。這個(gè)工具是 Windows 10 SDK?(https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) 中的一個(gè)工具。去微軟網(wǎng)站查看發(fā)現(xiàn),這貨體積巨大,包含了許多開(kāi)發(fā) Windows 所需的工具包。但我們并不需要其他的部分,所以這里投機(jī)取巧一下,只安裝所需的部分。
首先要下載 ISO 格式的安裝鏡像,不要直接下 Installer。大概 800M 左右,半夜直連下載速度飛快,白天就不行了,視情況使用更加科學(xué)的上網(wǎng)方式。
下好之后,使用 Windows 自帶的 Mount 功能映射為虛擬光驅(qū)。打開(kāi) Installers 目錄,找到 WindowsAppCertificationKitx64-x86_en-us.msi 這個(gè)包,雙擊安裝。
這個(gè)工具包就包含了我們需要的 SignTools.exe ,其他的部分不需要,可以刪掉這個(gè)鏡像了。在 C:\ProgramFiles(x86)\WindowsKits\10\AppCertificationKit\signtool.exe 路徑可以找到我們需要的工具。
5. 簽名安裝
在 msix 和證書文件所在目錄打開(kāi) cmd,執(zhí)行以下命令完成簽名:
"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 包,就可以順利安裝了。
Enjoy!
總結(jié)
以上是生活随笔為你收集整理的不装 VS 自己编译安装 Windows Terminal的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开源基于Canal的开源增量数据订阅消费
- 下一篇: 终于等到你!微软正式上线 Windows