定义
Chocolatey是一个运行在微软Windows上的机器级命令行软件包管理器与安装器,通过命令行完成软件的获取、安装、升级与卸载[2]。它使用NuGet的打包基础设施来传递包,并以Windows PowerShell作为执行自动化逻辑的手段,从而把原本需要图形界面逐步点击的安装流程变成可脚本化的操作[1]。
在该体系里,包与软件是两个不同概念。包以nupkg文件形式存在,本质是一个经过扩展的NuGet包,包含元数据、依赖与版本信息,并可内嵌软件本体或自动化脚本;软件则指包所代表的实际运行程序,可能来自原生安装器、压缩包,或直接放在包内[1]。命令行的入口是choco,例如choco install用于安装,choco upgrade用于升级,choco uninstall用于卸载[4]。
原理
安装一个包时,Chocolatey客户端先用NuGet组件从源仓库取回包,并把包固定安装到安装目录下的lib子目录,以便跟踪、升级和卸载;随后判断该包是自包含还是带有自动化脚本,并在执行脚本前对注册表做一次快照,供之后比对以确定卸载信息[1]。脚本通常为chocolateyInstall.ps1,其中以哈希表形式给出安装器地址、校验和、静默安装参数与有效退出码,再由Install-ChocolateyPackage等辅助函数执行安装[5]。
包内可执行文件通过垫片(shim)机制加入系统的PATH,垫片是一个小程序,被调用时转而启动包目录中的真实可执行文件;默认情况下包安装于C:\ProgramData\chocolatey\lib,垫片位于同一安装目录的bin下[5][6]。下载二进制文件时校验和用于完整性核对,若下载来源非受信位置,客户端会强制要求提供校验和[7]。Chocolatey默认从社区软件包仓库获取包,也可通过指定源参数或添加自定义源改用其他仓库,包括组织内部的私有仓库[1]。
发展历程
Chocolatey的构思与NuGet密切相关。作者Rob Reynolds在2010年参与NuGet相关团队,2011年2月有人戏称若推出机器级包管理器就取名Chocolatey NuGet,因为它不会是原味的NuGet包;名字由此而来[8][2]。2011年3月21日项目提交首批代码,3月23日发布0.6.0版本[8]。2011年9月社区仓库上线,同年出现Chocolatey GUI这一图形界面项目[8]。
早期版本以PowerShell模块形式实现,包目录随升级不断堆积。2014年3月项目开始用C#全面重写,2015年3月发布0.9.9版,客户端改为独立可执行程序choco.exe,包目录不再带版本号,升级改为覆盖式更新,并新增确认提示、命令内帮助与自动化卸载等安全相关改进[9][10]。2014年4月,微软推出OneGet(后更名PackageManagement),它与PowerShell 5一同提供,可把其他包管理器接入PowerShell,并预先配置为可以浏览Chocolatey仓库[2]。2014年10月社区仓库启用审核机制,此后提交的每个包版本都要经过审核才能公开[7]。
应用
Chocolatey主要用于Windows软件的分发与批量部署。管理员可以用一条命令安装或升级指定软件,例如choco install git、choco upgrade all,从而免去逐个查找安装器并点击安装向导的流程[4]。它能统一处理MSI、EXE等多种安装器格式,因此不必再直接调用msiexec等具体安装程序[5]。
在运维层面,Chocolatey可与配置管理工具结合使用,官方及社区提供了面向Puppet、Chef等的集成模块,使软件及其具体版本能够写进配置代码,满足部署时依赖特定版本的需求[5]。组织内部通常建议自建仓库,把社区包改写为内嵌安装器的内部包,从而不依赖公网下载源,获得更强的可靠性与可控性;商业版还提供包的内部化与私有CDN缓存等功能[6][5]。
局限
社区仓库受软件再分发权限的制约,是使用中最主要的限制。为不侵犯分发权,大多数社区包并不包含软件本体,而是在安装时从厂商官方地址下载安装器,这使安装过程依赖外部地址长期有效,一旦地址变化包就会失效;因此官方并不建议组织在生产环境中直接依赖社区仓库[6][11]。采用社区仓库的组织需要把Chocolatey站点以及每个所用包对应的官方分发地址都加入白名单,网络策略会更加复杂[7]。
社区包的安装脚本以管理员权限运行PowerShell,脚本可执行任意操作,审核只确认包从官方来源获取软件、检查脚本是否有恶意行为,并不能保证上游二进制本身未被替换;若包未使用校验和,下载内容就缺少完整性核对手段[7][12]。社区包由志愿者维护,不受任何支持承诺,维护者变更时也可能带来风险[11]。此外,为维持站点稳定性,社区仓库对请求实施限流,超出限制会返回429状态,封禁通常持续1小时[11]。开源版与商业版在功能上存在差异,运行时病毒扫描、私有CDN缓存等能力只提供给授权版本[7]。
参见
参考资料
- Chocolatey Software Docs | Why Chocolatey? [引用日期2026-10-14]
- Chocolatey [引用日期2026-10-14]
- Chocolatey Software Docs | Legal [引用日期2026-10-14]
- Chocolatey Software Docs | Getting Started [引用日期2026-10-14]
- Chocolatey on Windows - Advertisement: [引用日期2026-10-14]
- Chocolatey Software Docs | Frequently Asked Questions [引用日期2026-10-14]
- Chocolatey Software Docs | Security [引用日期2026-10-14]
- chocolatey.org 上的网页 [引用日期2026-10-14]
- Windows Just Got Chocolatey [引用日期2026-10-14]
- CHANGELOG [引用日期2026-10-14]
- chocolatey.org 上的网页 [引用日期2026-10-14]
- Chocolatey Package Security Guide for Windows Environments [引用日期2026-10-14]