![Chocolatey 如何知道哪些包已安装,哪些包未安装](https://linux22.com/image/1463132/Chocolatey%20%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%93%AA%E4%BA%9B%E5%8C%85%E5%B7%B2%E5%AE%89%E8%A3%85%EF%BC%8C%E5%93%AA%E4%BA%9B%E5%8C%85%E6%9C%AA%E5%AE%89%E8%A3%85.png)
巧克力味是适用于 Windows 的软件包管理系统。首先,您需要下载并安装 Chocolatey,这是一款免费的开源软件。您告诉它您想要什么软件,然后(通常)回答一个或多个问题。然后 Chocolatey 会为您下载并静默安装该软件。
我试图更好地理解 Chocolatey 如何知道它已经安装了什么。这样我就可以理解中断“chocolatey 安装”操作是否会导致 Chocolatey 永远陷入困惑。
使用 Chocolatey 0.9.9.8,当我尝试连续两次安装包 (7zip) 时,第一次成功,第二次什么也没做,只是打印了一条警告消息。消息显示:
7zip v9.38 已安装。
使用 --force 重新安装、指定要安装的版本或尝试升级。Chocolatey 安装了 0/1 个包。
请参阅日志了解详细信息 (C:\ProgramData\chocolatey\logs\chocolatey.log)。
我查看了 Chocolatey 源代码,试图找到答案。检查包是否已安装的方法调用似乎是这个。但我找不到 FindPackage 方法的源代码。
Chocolatey 如何知道它已经安装了哪些软件包?它是否在我的计算机上的某个地方保留一个中央数据库,以跟踪它已安装和未安装的内容?
答案1
它根据磁盘上的实际包进行跟踪。请注意,例如在默认安装位置中有一个 lib 文件%ChocolateyInstall%
夹'C:\ProgramData\chocolatey\lib'
。
该文件夹中是软件包文件夹,每个文件夹中都有一个*.nupkg
文件。每个*.nupkg
文件代表一个已安装的软件包。
对于您正在寻找的地方,请注意以下几点 -
- https://github.com/chocolatey/choco/blob/3dcd195b94bf6e6ed9a19b8b3bab8c441cb21dd0/src/chocolatey/infrastructure.app/nuget/NugetCommon.cs#L96
- https://github.com/chocolatey/choco/blob/3dcd195b94bf6e6ed9a19b8b3bab8c441cb21dd0/src/chocolatey/infrastructure.app/nuget/NugetCommon.cs#L30
- https://github.com/chocolatey/choco/blob/3dcd195b94bf6e6ed9a19b8b3bab8c441cb21dd0/src/chocolatey/infrastructure.app/ApplicationParameters.cs#L50
另外,GitHub 技巧让你不需要 webarchive 链接 - 一旦你找到了源代码位,点击y
此处获取永久链接。