使用 WinGet 工具进行调试和问题故障排除
如果 WinGet 似乎未正确安装,请按照 PowerShell 命令提示符执行以下步骤:
Install-PackageProvider -Name NuGet -Force | Out-Null
Install-Module -Name Microsoft.WinGet.Client -Force -Repository PSGallery | Out-Null
Repair-WinGetPackageManager -Force -Latest
WinGet 命令失败时,有时必须查看日志文件,以便更好地了解行为。
WinGet 日志
默认情况下,Windows 程序包管理器会在执行命令时创建日志文件。 这些日志包含有助于调试 WinGet 问题的信息。 日志文件没有最大大小。 它们通常只有几 KB 的大小。 当目录中的日志文件数超过 100 时,将开始删除最早的日志文件。 没有基于时间的日志删除,这些设置不可配置。 如果已达到 100 个文件日志容量,只需将想要保留的任何 WinGet 日志移到其他目录中。
使用命令 winget --info
查找 WinGet 日志文件的目录路径。 WinGet 日志文件的默认路径为:
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir
可将 --logs 或 --open-logs 选项包含在任何命令中,以便在命令完成后打开日志目录。 以下是使用 --logs 选项的一些示例:
> winget list --logs
> winget source update --open-logs
--verbose-logs
如果需要更全面的日志文件(它们提供与 CDN 和源的完整通信),还可以在命令行上包含 --verbose 或 --verbose-logs。 以下是使用 --verbose-logs 选项的一些示例:
> winget install vscode --verbose-logs
> winget search -n visual --verbose-logs
> winget source add -n mysource -t Microsoft.REST -a https://www.contoso.org --verbose
已知问题
在 Windows 程序包管理器客户端存储库中,已知问题以及源和行为的列表会保持最新状态。 如果使用 WinGet 工具时遇到问题,请转到此处进行故障排除。
退出代码
WinGet 工具返回退出代码,以指示命令是成功还是失败。 有关退出代码及其含义的表格,请参阅 Windows 程序包管理器客户端存储库的“返回代码”文件。
特定用户的范围与计算机的范围
并非所有安装程序都支持在“用户”范围与“计算机”范围内进行一致安装。
- 基于 MSIX 的包:可靠的 WinGet 行为。
- 基于 MSI 的包通常支持可靠的 WinGet 配置,但在某些情况下,该包嵌套在基于 .exe 的安装程序中,因此可能具有更大的可变性。
- 基于 EXE 的安装程序围绕范围的行为不一定具有确定性。 在某些情况下,用于指定范围的参数并不可用,而在其他情况下,安装程序可能会根据用户是否是本地管理员组的成员来做出决定。 在用户范围内安装的包可能仍需要管理员的 UAC(用户帐户控制)授权。
在 GitHub 上的 WinGet 产品存储库中查看有关范围相关问题的更多详细信息。
“403 已禁止”错误
尝试使用 WinGet 工具下载包时,可能会出现 403 禁止访问错误。 如果独立软件供应商(ISV)选择没有由 WinGet 等包管理器服务分发其产品,则可能会出现此问题。
服务器负责启动下载通常检查下载请求中包含的用户代理字符串,以标识设备或客户端(例如浏览器、WinGet)。 如果可以使用浏览器下载安装程序,但遇到 WinGet 问题,ISV 可能会阻止 WinGet 用户代理字符串。
WinGet 的用户代理字符串具有以下格式:
winget-cli WindowsPackageManager/{Client Version} DesktopAppInstaller/Microsoft.DesktopAppInstaller {AppInstaller Version}
示例:
winget-cli WindowsPackageManager/1.9.25200 DesktopAppInstaller/Microsoft.DesktopAppInstaller v1.24.25200.0