對於開發者來說,一款好用的軟體包管理工具可以大大提高安裝、部署、管理軟體的效率。在 Win 環境下,我們手動安裝一款軟體的流程是:之前只有 MacOS 和 Linux 官方才有軟體包管理工具,其實微軟官方也為 Windows 系統發布了一款名為
Winget 的軟體包管理工具。雖然在 Windows 平臺已經有
scoop 和 chocolately 這樣的包管理工具,但畢竟 WinGet 是微軟親兒子,而且在不斷更新中。現在 Winget 還處於開發預覽階段,項目託管在 GitHub 上。同時,微軟還在 GitHub 上維護著 winget-pkgs 倉庫。winget-pkgs 和 WinGet 的關係是:WinGet 需要使用軟體源 Manifest 來管理和安裝軟體,通過讀取對應的 Manifest 清單來尋找軟體,然後才能下載和安裝軟體,而 winget-pkgs 就是維護 Manifest 清單的 Repo。比如我想安裝 Postman, WinGet 就會做如下事情:正在添加依賴:360瀏覽器 正在添加依賴:360殺毒 法1:提交 WinGet 的預覽體驗申請,Win10 商店下載法2:申請加入 Windows Insider,Win10 商店下載推薦法3,簡單直接, 在 GitHub 搜索 WinGet,microsoft/winget-cli 就是該項目。在 releases 頁面下載名為 Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.appxbundle 的軟體安裝包。安裝 應用安裝程序 後,可以通過在命令提示符下鍵入 「winget」 來運行 WinGet 。最常見的使用場景之一是搜索並安裝你最喜歡的工具。若要搜索某個工具,請鍵入 winget search \<appname>確認你需要的工具可用後,可以通過鍵入 winget install \<appname> 來安裝該工具。 WinGet 工具會啟動安裝程序,將應用程式安裝在你的電腦上。比如搜索並安裝我們前一陣介紹的 PowerToys:
除了安裝和搜索外,
WinGet 還提供了許多其他命令,用來 顯示應用程式詳細信息, 更改源以及 驗證程序包。若要獲取完整的命令列表,請鍵入 winget --help
命令添加、刪除和更新
winget 工具訪問的 Windows 程序包管理器存儲庫。驗證要提交到 Windows 程序包管理器存儲庫的清單文件。選項info 提供有關 winget 的所有詳細信息,包括許可證和隱私聲明的連結。彩(虹)蛋安裝命令後加 --rainbow,可以看到彩虹進度條,是不是很騷 當然你可以通過winget settings將彩虹進度條設置為默認,就不用打--rainbow了
winget 工具的當前預覽版支持以下類型的安裝程序編寫 winget 腳本可以編寫批處理腳本和 powershell 腳本來安裝多個應用程式。
@echo off
Echo Install Powertoys and Terminal
REM Powertoys
winget install Microsoft.Powertoys
if %ERRORLEVEL% EQU 0 Echo Powertoys installed successfully.
REM Terminal
winget install Microsoft.WindowsTerminal
if %ERRORLEVEL% EQU 0 Echo Terminal installed successfully. %ERRORLEVEL%
註:使用腳本時, WinGet 會按指定順序啟動應用程式。當安裝程序返回成功或失敗時, WinGet 會啟動下一個安裝程序。如果某個安裝程序啟動了另一進程,它可能會提前返回到 WinGet 。這會導致 WinGet 在上一個安裝程序完成之前安裝下一個安裝程序。如果官方源未包含你的工具或應用程式, 你可以將程序包提交到官方的存儲庫。添加你最喜愛的工具後,你和其他人都可以使用它。官方存儲庫,也就是官方源的地址:https://github.com/microsoft/winget-pkgs官方歡迎你提交自己編寫的 manifest,以解壓軟體7Zip為例,manifest長這樣:它包含了下載地址,Sha256校驗碼等關鍵信息:
Id: 7zip.7zip
Name: 7Zip
AppMoniker: 7zip
Version: 19.0.0
Publisher: 7zip
Author: 7zip
License: Copyright (C) 1999-2020 Igor Pavlov. - GNU LGPL
LicenseUrl: https://7-zip.org/license.txt
MinOSVersion: 10.0.0.0
Homepage: https://www.7-zip.org/
Description: Free and open source file archiver with a high compression ratio.
Tags: "7zip,compression,file compression,utility,tool,zip"
InstallerType: msi
Installers:
- Arch: x64
Url: https://www.7-zip.org/a/7z1900-x64.msi
Sha256: A7803233EEDB6A4B59B3024CCF9292A6FFFB94507DC998AA67C5B745D197A5DC
Switches:
Silent: /quiet /norestart
SilentWithProgress: /passive /norestart
輸入:winget features,會給出所有 WinGet 上的實驗功能,顯示如下:默認狀態下,實驗性功能是禁用狀態,
WinGet 提示我們打開 settings(輸入 WinGet settings 即可), 類似於 vscode,WinGet 的設置也通過 json 來進行配置其中,對於自動補全功能,需要額外對 Powershell 進行如下配置:首先給Powershell創建一個$profile$profile主要用於個性化常用的函數、別名等等。每次加載powershell的時候,都會執行profile中的內容。
New-Item –Path $Profile –Type File –Force
Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
$Local:word = $wordToComplete.Replace('"', '""')
$Local:ast = $commandAst.ToString().Replace('"', '""')
winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
install is the first command below the rootshow is the first command that starts with shlist is the first sub-command of source that starts with l--version is the first argument defined for the rootwinget install "Power Toys""Power Toys" is the first package whose Id, Name, or Moniker starts with powerwinget install "Power Toys" --version ⇥winget install "Power Toys" --version 0.19.20.19.2 is the highest version of Power Toys at the time of writing其它功能就不需要額外配置 powershell 了,只需要在 settings 設置完成即可:比如我想開啟list功能,自動補全功能,進行如下的設置:我們配置完 settings 文件後,再輸入 winget features 來查看實驗性功能的開啟情況:你可能注意到,甚至 list 命令和 upgrade 命令都是實驗性功能,可見其不夠完善。目前比較操蛋的是 WinGet 竟然還沒有卸載功能,老逛測試時該項目已經發布半年多了。
後來老逛發現了它的官方路線圖,原來到 2021 年 5 月份,我們才能得到一個基本可用的 1.0 版本。
上文提到,之前在 Windows 平臺上,已經有了兩個不錯的包管理工具:Chocolatey 以及 Scoop,Chocolatey 的自我定位是 Windows 系統的軟體管理自動化。它能夠在無需人工幹預的情況下自動安裝超過 20 種 Windows 軟體包類型,而且開箱即用,支持配置超過 7000 款主流軟體,包括 Google Chrome 和 VLC 多媒體播放器等桌面熱門應用程式。
Scoop 同樣可以通過單命令安裝 Windows 軟體,不過它的適用目標相對來說更狹窄,也更有針對性。這款軟體包管理工具更多的時候是幫助開發者安裝系統工具時使用,尤其是那些依賴於 Linux 但在 Windows 系統上不存在的軟體程序。
兩款軟體包安裝程序都有各自的優缺點,所以需要根據自己的需求進行選擇。如果想快速簡單地安裝熟悉的 Windows 程序,那麼 Chocolatey 可能適合你。
其廣泛的社區驅動的軟體包存儲庫意味著無需額外配置的情況下,你就可以找到幾乎所有流行的 Windows 程序。
這兩個成熟的工具都比 WinGet 要完善,在現階段,如果你想在 Windows 上體驗包管理工具,老逛建議還是 scoop+chocolately 吧。
因為今天這篇文章是介紹 WinGet,推薦兩篇文章介紹這兩個工具,我就不多贅述了。
Scoop: https://sspai.com/post/52496
Chocolately: https://sspai.com/post/55309
WinGet 於 5 月 29 在微軟的 Build 2020 上發布,歷時大半年 ,老逛在 2020 年末體驗了一遍 WinGet,甚至沒有卸載功能。目前功能還非常有限,畢竟還處於預覽體驗階段,但是因為它有官方 buff 的加持,我還是希望它越來越好,甚至希望有天它能像 Linux子系統(WSL)一樣集成到官方系統中,給 Windows 平臺的用戶帶來穩定易用的體驗。我覺得我們還是要寬容吧,準官方的 Windows 包管理工具在不斷進化中,如果你喜歡開源項目,並且希望推動 WinGet 的發展,可以使用 WinGet 並在官方 Github 提出issue,開源社區萬歲!
比如,剛提到的 list (列出已安裝軟體)及 upgrade (升級軟體)的功能,也是開發人員回復並落實了用戶提出的 issue。
[1] https://sspai.com/post/60592 作者:SpencerWoo[2] https://sspai.com/post/60597 作者:stevapple[3] https://docs.microsoft.com/zh-cn/windows/package-manager/[4] https://github.com/microsoft/winget-cli
0. 逛逛GitHub交流群限時加入
1. IntelliJ IDEA 從入門到上癮!
2. 手機抓包!
3. 幹掉馬賽克!
4. GitHub 暗黑模式終於來了!