资讯动态

Windows包管理器Chocolatey安装详解:原理、报错与实操

发布时间:2026/10/10 17:51:11 来源:尧图企业网站定制
1. 安装前的准备先把 Chocolatey 的安装原理搞明白很多人一上来就复制官方那行安装命令结果 PowerShell 里噼里啪啦报一串错误整个人直接懵掉。其实 Chocolatey 安装没那么玄乎你先想明白它到底干了什么事再去看报错思路就清晰了。Chocolatey 是 Windows 平台上的包管理器你可以把它理解成手机上的应用商店——你想装什么软件一条命令告诉它它自动去下载、安装、配环境变量、做卸载入口。你不用再去百度“某某软件官网”也不用担心下载到捆绑垃圾。它装好之后你日常最常用的就是choco install 软件名 -y这种命令。那它自己是怎么装到系统里的本质上是这样一条链路PowerShell 脚本install.ps1去 Chocolatey 官方服务端下载 CLI 工具包解压到C:\ProgramData\chocolatey目录然后配置系统 PATH 环境变量把choco.exe的路径写进去。整个链路涉及三样东西PowerShell 脚本执行权限、网络访问能力、目录写入权限。你遇到的几乎所有报错跑不出这三个环节。我在实际帮人排查时发现有些报错根本不是 Chocolatey 本身的问题而是用户的 PowerShell 版本太老、或者执行策略没放开、又或者公司电脑有额外的安全软件拦截。先做一轮环境自检能省掉后面一大半的折腾。下面是我的建议检查清单操作系统Windows 7 SP1 及以上建议 Win10/Win11 用最新版 Chocolatey太老的系统建议升级 PowerShell 后再装。PowerShell 版本至少 5.1。你可以在 PowerShell 里运行$PSVersionTable.PSVersion查看5.1 是 Win10/11 自带的版本够用。.NET Framework / .NET 运行时Chocolatey CLI 依赖 .NET Framework 4.8Win10/11 自带或者更高版本 .NET缺失时会有明显提示。管理员权限安装 Chocolatey 必须用“以管理员身份运行”的 PowerShell。这个卡了很多新手。网络连通性安装过程需要访问 community.chocolatey.org。如果你在公司网络或校园网环境下还要确认代理设置是否正确。提示如果你是在公司统一派发的电脑上操作很多情况下是 IT 策略锁了 PowerShell 执行策略或者是安全软件把安装脚本直接干掉了。这种情况先看报错信息里有没有“组策略”“被阻止”“已隔离”之类的关键词有的话找 IT 开通权限比自己硬刚省时间。2. 高频报错类型与根因拆解从报错信息反推问题我总结了实际环境中最常见的几类报错。建议你照着报错信息的关键词去对号入座不要一上来就乱试命令。这跟看病一样先诊断再用药。2.1 执行策略报错无法加载脚本“在此系统上禁止运行脚本”这是出现频率最高、也最好解决的报错。表现形式一般是红色错误信息里面包含无法加载文件 C:\...\install.ps1因为在此系统上禁止运行脚本。原因很简单Windows PowerShell 默认的执行策略ExecutionPolicy是 Restricted也就是说脚本文件一概不让跑。Chocolatey 的官方安装方式偏偏就是执行一个 PowerShell 脚本所以直接被拦住了。解决办法有两种我推荐临时放开当前会话的执行策略只对当前这个 PowerShell 窗口生效安全影响最小Set-ExecutionPolicy Bypass -Scope Process -Force如果你希望一劳永逸可以对当前用户放开限制以后自己写的脚本也能跑Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force这里解释一下Bypass和RemoteSigned的区别。Bypass是彻底放开不做任何限制适合安装时临时用RemoteSigned是只允许运行本地脚本和经过签名的远程脚本日常用更安全。我个人不建议用Unrestricted那个限制太少安全软件容易报风险。注意Get-ExecutionPolicy可以查看当前生效的策略。如果你改完 CurrentUser 后依然报错很可能是组策略层面的策略覆盖了用户设置那就要检查是不是加了域环境、是不是被安全策略接管了。2.2 TLS/SSL 安全通道报错未能创建 SSL/TLS 安全通道这个报错的典型信息长这样请求被中止: 未能创建 SSL/TLS 安全通道。或者类似“基础连接已经关闭: 无法与远程服务器建立信任关系”的提示。出现这个问题的核心原因在于你电脑上的 PowerShell 在发起 HTTPS 请求时默认使用的加密协议版本太低了。Chocolatey 官方服务端和 GitHub 上托管的安装包现在已经强制要求 TLS 1.2而 Windows PowerShell 5.1 早期版本在某些系统上默认协商的是 TLS 1.0 或者 1.1两边谈不拢连接就被中止了。我当时遇到这个问题是在一台 Win7 的机器上装东西折腾了半天才意识到是 TLS 版本问题。解决办法是在执行安装命令之前先手动指定允许 TLS 1.2[Net.ServicePointManager]::SecurityProtocol [Net.ServicePointManager]::SecurityProtocol -bor 3072这里的3072是 TLS 1.2 对应的枚举值。如果系统支持 TLS 1.3也可以把枚举值12288一并或进去。实际测试下来加上这一行之后绝大多数“SSL/TLS 安全通道”报错都能消失。Win7 这种老系统特别容易在这一点上翻车因为默认 .NET Framework 版本低、系统对 TLS 1.2 的默认支持也没打开。如果你在 Win7 上装除了执行上面那一行还建议先装好系统的更新补丁让 .NET Framework 至少到 4.7.2。2.3 权限问题报错拒绝访问或目录写入失败如果你没有用管理员权限打开 PowerShell安装跑到一半大概率会看到一个 Access Denied 类型的报错比如Access to the path C:\ProgramData\chocolatey is denied.为什么会这样因为 Chocolatey 要往C:\ProgramData这种系统级目录写入文件还要修改系统环境变量 PATH这些操作普通用户权限根本没有资格做。Windows 的 UAC用户账户控制机制会拦住这类操作。解决办法不是右键“以管理员身份运行”那么简单你要确认你的 PowerShell 窗口真的拿到了管理员权限。有一个判断方法whoami /groups | findstr S-1-16-12288如果执行完能看到S-1-16-12288开头的一行说明当前进程是管理员权限High Mandatory Level。没有输出的话就是没有提权成功需要重新打开管理员 PowerShell。注意在 PowerShell 里输入start powershell -Verb RunAs可以直接弹出一个新的管理员窗口。但如果你本人不在管理员组里怎么操作都没用那是账户本身权限不够的问题。2.4 网络下载失败连不上服务器、超时、下载文件损坏网络类报错的形态非常多常见的有The operation has timed out或者下载到一半中断又或者提示找不到服务器。这类问题核心是网络通不通、代理设置对不对。先做最基础的连通性测试Test-NetConnection community.chocolatey.org -Port 443看到TcpTestSucceeded : True说明网络端口通否则就是被防火墙、代理或者网络策略拦了。如果你在公司网络里大概率要走公司代理才能访问外网。这时候检查系统代理netsh winhttp show proxy如果显示有代理地址但 PowerShell 没有正确使用它可以在当前会话里临时设置环境变量来让下载请求走代理$env:HTTP_PROXY http://代理IP:端口 $env:HTTPS_PROXY http://代理IP:端口设置完再跑安装命令。需要提醒的是代理配置只在当前 PowerShell 窗口临时生效不会污染系统设置装完重开窗口就恢复原样。另外还有一种情况是下载下来的安装包不完整导致解压失败或 choco.exe 无法运行。建议把系统临时目录的 Chocolatey 相关缓存清理干净再重新下载避免旧残留文件捣乱Remove-Item -Recurse -Force $env:TEMP\chocolatey -ErrorAction SilentlyContinue2.5 安全软件拦截脚本被隔离、安装包被删除Windows Defender 和第三方杀毒软件是另一个常见拦截源。它们经常把install.ps1或者刚下载的 Chocolatey 工具包当成风险软件处理报错信息里会出现“无法运行”“已被隔离”“Windows Defender 已阻止”之类的字眼。我以前在一台装有第三方安全软件的机器上遇到过安装命令执行到一半脚本文件直接被实时防护干掉了。你回头检查会发现C:\ProgramData\chocolatey目录压根没建出来或者建出来了但没有 choco.exe。处理方式分几步临时关闭实时防护。Windows Defender 的话可以在“病毒和威胁防护”里关闭实时保护装完再开启。如果用的是第三方安全软件在软件设置里把C:\ProgramData\chocolatey目录加入白名单/排除项。安装完成后第一时间验证choco --version确认 CLI 正常然后再把实时防护打开。我个人的建议是不要长期关闭安全软件只在安装阶段临时关闭几分钟就够了。装完马上恢复别因小失大。2.6 残留安装导致半死不活装了一半报错无法继续有一种很让人抓狂的情况Chocolatey 装了一半失败了第二次再跑安装命令又报错说“Chocolatey 已经存在”或者“上一次安装未完成”。这种一般是第一次安装时中断留下了不完整的目录和配置。这时候我的处理顺序是先检查choco --version看看能不能直接识别。如果能识别说明安装其实已经完成了大半不需要重新安装。如果识别不了手动清理残留删除C:\ProgramData\chocolatey目录、清空%TEMP%\chocolatey缓存、检查环境变量 PATH 里有没有遗留的 choco 路径。再用管理员 PowerShell 重跑安装命令。小技巧清理环境变量里残留路径可以用快速访问“编辑系统环境变量”的图形界面也可以在 PowerShell 里用[Environment]::GetEnvironmentVariable(Path, Machine)查看系统级 PATH 内容手动揪出包含chocolatey的条目删掉。3. 完整实操一步一步把 Chocolatey 装成功前面把原理和常见报错都过了一遍现在直接上完整流程。这套流程我实际帮人跑过很多次只要环境不是那种被安全策略锁死的企业域控机器基本都能一把过。3.1 打开一个真正的管理员 PowerShell先按Win X选择“终端(管理员)”或者“Windows PowerShell(管理员)”。如果你习惯用搜索也可以直接在开始菜单搜索 PowerShell然后右键选择“以管理员身份运行”。打开后用我刚才提到的方法验证一下权限是否生效whoami /groups | findstr S-1-16-12288确认有输出再继续下一步。这一步漏了后面全白干。3.2 临时放开执行策略当前会话临时放开Set-ExecutionPolicy Bypass -Scope Process -Force执行完可以再执行Get-ExecutionPolicy -Scope Process确认结果是Bypass。3.3 运行官方安装命令最新版的官方命令是这样一条我会拆开解释每段含义Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(https://community.chocolatey.org/install.ps1))三个分号隔开三段逻辑第一段Set-ExecutionPolicy Bypass -Scope Process -Force只对当前窗口放开脚本执行限制。第二段[System.Net.ServicePointManager]::SecurityProtocol ... -bor 3072把 TLS 1.2 合入可用加密协议集合防止 SSL 握手失败。第三段iex ((New-Object System.Net.WebClient).DownloadString(...))用 .NET WebClient 下载安装脚本并在当前会话执行。这里用iexInvoke-Expression是为了在真实的 PowerShell 上下文里跑而不是像-Command那样起新进程。提示如果你是在一个全新的 PowerShell 窗口里执行建议先手动执行前两段然后再执行第三段分开跑更容易定位问题。比如执行策略报错和 TLS 报错是不同环节一起跑不容易看清错在哪一步。3.4 观察安装成功的标志安装过程顺利的话你会看到一堆文字输出最后出现类似Chocolatey (v2.2.2) is now installed. 3 packages installed.或者更早的版本提示 “Chocolatey installed successfully”。同时C:\ProgramData\chocolatey\bin\choco.exe这个文件应该存在了。3.5 安装后的验证与环境检查装完别急着关窗口先做三件事验证安装状态第一查看版本号choco --version第二列出本地已安装的包choco list --local-only第三确认 PATH 环境变量是否已经写入$env:Path [Environment]::GetEnvironmentVariable(Path, Machine) ; [Environment]::GetEnvironmentVariable(Path, User) choco --version最后那一行之所以要重新组合一次 PATH是因为当前 PowerShell 窗口里的 PATH 还是旧的不包含刚写入的 choco 路径。你重开一个新的 PowerShell 窗口就能直接用了不需要手动改什么。我也遇到过一种情况choco.exe能运行但每次都要用完整路径才能调起来。这种十有八九是安装时 PATH 更新没成功或者杀毒软件改写了注册表环境变量。按照上面的命令手动刷新 PATH 就能解决一大半。4. 安装后的常用操作与避坑心得装完了 Chocolatey 只是开始接下来怎么用、怎么配镜像、遇到什么坑这些才是日常高频问题。我捡几个最实用的讲。4.1 最常用的几条命令安装软件的通用格式是choco install 包名 -y-y表示遇到确认提示直接自动同意装多个软件时不用一直敲回车。卸载choco uninstall 包名 -y升级某个软件choco upgrade 包名 -y一次性升级所有通过 Chocolatey 安装的软件choco upgrade all -y查找有哪些包可用choco search 关键词列出本地已安装choco list --local-only我个人习惯装完 Chocolatey 之后立刻执行一条命令把全局确认关掉省得以后每次都要加-ychoco feature enable -nallowGlobalConfirmation开这个之后choco install 包名就不用带-y了但卸载时也一样不会弹确认手滑了就只能认栽。怕误操作的可以不开。4.2 包源镜像配置解决下载慢或不稳定的问题Chocolatey 默认的源指向 community.chocolatey.org。如果你的网络访问这个源非常慢或者经常下载失败可以考虑切换为国内镜像源。我记得清华 tuna 的 Chocolatey 镜像一直有人维护配置方式如下choco source add -n tuna -s https://mirrors.tuna.tsinghua.edu.cn/chocolatey/ --priority1 choco source disable -n chocolatey第一条命令添加一个新的源并设置高优先级第二条命令把默认官方源暂时禁用。如果你想恢复官方源执行choco source enable -n chocolatey choco source remove -n tuna有一个容易迷惑的点配置了镜像源只影响之后用choco install安装软件时的下载来源不影响 Chocolatey 本身的安装。因为安装 Chocolatey 走的是官方安装脚本和独立下载链路跟包源没关系。所以如果你第一次装 Chocolatey 就卡在下载上换镜像源是救不了的你得解决网络和代理的问题。4.3 我踩过的几个实战坑第一个坑用普通用户权限去跑安装命令跑完一看有报错提示想当然以为“我关掉 UAC 就好了”结果自己改了注册表把 UAC 调低然后系统安全状态出问题。这里我要专门提醒不要为了装一个包管理器去动系统安全机制不值得。第二个坑装了安全软件之后没有提前把 Chocolatey 目录加白名单就安装。结果装到一半脚本被隔离后续排查花了很长的时间最后还是手动删残留目录才重新装上。正确的顺序应该是先把整个C:\ProgramData\chocolatey目录加入安全软件白名单再执行安装命令。第三个坑公司电脑的代理配置非常复杂系统层面走了 PAC 文件但 PowerShell 直接发起请求时根本不会自动去解析 PAC。这种情况你需要在 PowerShell 里设置$env:HTTP_PROXY和$env:HTTPS_PROXY指向真实的代理地址。我在前面的章节里写的那两行环境变量设置在实际场景中救过不少人。第四个坑Win7 老机器上即使你照着官方命令跑也容易在这个 TLS 问题上反复横跳。最好先检查 .NET Framework 的版本低于 4.7.2 的先把运行时升级到 4.8否则你就算在 PowerShell 里强行指定 TLS 1.2底层的 .NET 也可能不支持连接照样失败。4.4 Chocolatey 跟 WinGet 应该怎么选Windows 11 自带了 WinGetWindows Package Manager很多新手会问那我为什么还要装 Chocolatey我的看法是这样的两者不是替代关系而是互补关系。WinGet 的优势是系统自带、对微软生态中的应用覆盖好但它在命令行脚本化、自动化部署方面的能力相对弱一些。Chocolatey 在 DevOps 场景里更成熟很多 CI/CD 脚本、配置管理工具比如 Ansible、Puppet都有专门的 Chocolatey 模块你一条命令能装一个软件全家桶而且它的包更新和依赖管理机制更完善。如果你只是个人电脑上偶尔装几个软件用 WinGet 就够了。但如果你是开发者、运维或者经常在实验室折腾测试环境Chocolatey 是更顺手的那一个。两个都装也不冲突我自己的电脑就是两个并存日常看心情选。4.5 软件卸载务必用 Chocolatey 来卸有一种操作我见了太多次用 Chocolatey 装的软件卸载时直接去“控制面板”或者“设置”里卸载结果 Chocolatey 的包管理记录没被清掉下次跑choco upgrade all的时候又把那个软件拉回来装了一遍。这种“复活”现象特别坑人。正确做法无论你用什么方式装的软件只要是通过 Chocolatey 装的卸载就统一用choco uninstall 包名 -y。这样包记录和文件清理都会保持一致。如果确实有软件是手动安装的那就别混用老老实实用系统自带的卸载功能。还有一个小细节choco list --local-only看到的包列表会包含 Chocolatey 自身的依赖包比如chocolatey-core.extension不要手滑把基础依赖包给卸了不然后面装好多软件都会报缺依赖。5. 最后的几个安装细节补充关于安装 Chocolatey还有一些比较零碎但实际会遇到的问题我合并在一起讲。Q为什么会提示“此命令需要以管理员身份运行”但明明已经是管理员A很可能是“管理员”身份有了但 PowerShell 窗口没有被 UAC 提权。你要用右键方式打开管理员终端而不是双击普通终端后自己输入管理员命令。两者权限上下文完全不同。Q执行完官方命令后没有任何输出会不会装好了A正常情况不会“没有任何输出”。如果真的一点输出都没有大概率是命令没真正执行成功比如脚本下载被静默拦截了、或者iex没拿到可执行的内容。用choco --version验证一下没输出就是没装上。Q安装过程提示“无法解析此远程名称: community.chocolatey.org”如何处理A典型的 DNS 解析问题。先ping community.chocolatey.org看能不能解析出 IP解析不出来就是 DNS 配置的问题。检查网络适配器的 DNS 设置或者试试把 DNS 改成公共 DNS比如 223.5.5.5 这种国内公共 DNS 服务。改完再验证不用重启但要把 PowerShell 窗口重开一下。Q公司电脑上运行安装命令被组策略拦截自己不想找 IT 能不能解决A如果是组策略层面锁死的执行策略自己绕开会带来合规风险而且通常还会被公司的安全监控抓到。别硬绕走正规流程申请临时权限。最后再分享一个小细节我在排查安装报错时习惯先把报错信息完整截图或者复制到记事本里然后再去找解决方案。看着一堆报错容易焦虑但把它拆成“执行策略”“网络连接”“权限”“文件系统”几个块之后基本就清楚该怎么对症下药了。Chocolatey 安装本身并不复杂绝大多数报错只是环境没有对齐而已别被那几行红色错误吓退。另外等你把 Chocolatey 跑顺了可以顺手用choco install vscode -y装个编辑器或者choco install googlechrome -y装个浏览器体验一下。等批量装完几个软件之后你大概就能理解为什么命令行包管理器在 Windows 上这么香了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑