干了这么多年Windows系统维护和软件分发,我太清楚微软商店是个什么德行了。装个UWP应用弹半天转圈、下载到99%突然报错、提示“其中一个更新服务未正常运行”,这类问题我在不同机器上能遇到八百种姿势。但偏偏有些软件,尤其是微软自家的工具、某些UWP应用,还有最近讨论度很高的Codex命令行工具,官方就只给你放商店里,不做传统安装包。于是“跳过商店客户端、直接拿安装包”就成了一项刚需。
这篇文章就把我实际用过的几条路线全部摊开讲:网页版商店链接直接抓取官方安装包、winget命令行无损安装、开发者模式旁加载离线包。每条路线的原理、操作步骤、依赖处理和常见报错排查,我都会写清楚,保证你照着做就能脱离商店客服端独立安装软件,适合普通用户,也适合系统管理员和开发者。
1. 为什么有人想跳过微软商店
1.1 商店客户端“抽风”是常态
先说个背景。微软商店本质上是UWP应用(现在叫MSIX应用)的官方分发渠道,它由两个部分组成:一个是商店客户端本体(Microsoft Store App),另一个是背后的下载与更新服务。问题恰恰出在这套架构上——客户端和服务端之间的通信经常出岔子。
我遇到的典型场景包括:商店首页能打开但点下载没反应;下载进度条卡住不动,等半小时还是0字节;提示“我们这边出了什么问题,请稍后再试”;还有更常见的“其中一个更新服务未正常运行”,这个错误基本是商店缓存或更新服务组件损坏导致的。这时候很多人第一反应是重装商店、重置缓存,但就算折腾好了,下次系统更新后可能又复发。
作为长期维护多台电脑的人,我的想法很简单:既然问题是客户端这个“货架”坏了,那我就不碰货架,直接去仓库提货。应用本体的安装包始终在微软官方CDN上,只要拿到链接就能下载,再用系统自带的部署命令安装,这就完全绕开了商店客户端的各种毛病。
1.2 核心思路:商店只是货架,不是工厂
理解这条思路之前,你得先搞清楚UWP应用和传统Win32程序的区别。传统exe安装包是把所有文件打包好,双击运行setup.exe就完事;而UWP应用采用“打包+签名”模式,安装包是一个.msix或.msixbundle文件,里面包含应用代码、清单文件和数字签名。系统安装时会校验签名、检查依赖,然后把应用注册到当前用户环境里。
所以整个安装链路里,真正的“安装动作”是系统组件完成的,微软商店只是一个负责下载安装包、调用部署接口的前端程序。既然是前端,它就可以被替换掉。我们通过其他方式拿到同样的.msix安装包,再用系统自带的Add-AppxPackage命令安装,效果和商店安装几乎没有差别,应用的后续更新也可以继续走商店的更新通道,或者手动下载新版覆盖安装。
这里有个容易混淆的点:很多应用虽然标注“微软商店版”,但实际上底层是Win32程序打包成的MSIX格式,比如Windows Terminal、PowerToys、Recent版画图工具等。这类应用用旁加载方式安装完全没有问题。只有极少数依赖商店特定许可(比如某些包含内购或DLC的应用)才必须走商店正版授权流程,这种情况不在本文讨论范围内。
1.3 三条主流绕过路线对比
针对不同场景,我整理出三条可用路线,先给个总览,下面再逐个展开。
| 路线 | 原理 | 适合场景 | 难度 |
|---|---|---|---|
| 网页版商店链接解析 | 从商店网页版提取应用ID,在线工具解析出CDN直链,下载官方安装包后PowerShell部署 | 商店客户端不可用、需要离线安装包 | 中等 |
| winget命令行安装 | 使用Windows系统自带/可安装的包管理器,直接调取包源并执行安装 | 命令行环境、批量部署、商店图形界面卡死 | 简单 |
| 开发者模式旁加载 | 系统开启开发人员模式后,直接双击或命令安装已有的.msix/.appx包 | 已有安装包、需要安装未签名或自签名应用 | 简单 |
三条路线的底层逻辑完全一致:绕过“商店客户端”这个中间商,直接对接应用安装包和系统部署模块。区别只在于获取安装包的方式不同。下面我分别拆开讲,每一步都会配上实际操作。
2. 路线一:网页版商店链接直接取包
2.1 用在线解析服务拿到官方安装包
如果你的目标是“完全脱离商店客户端”,那路线一是最彻底的选择。原理说起来也不复杂:微软商店有一个网页版,地址是apps.microsoft.com,每个应用在网页上都有自己独立的详情页,网址里带着一串应用识别码(比如某个应用的链接是https://apps.microsoft.com/detail/9NBLGGH4NNS1,后面的那串就是ProductId)。
商店客户端下载应用时,其实也是拿这串ProductId去微软的CDN服务请求安装包。既然有这层对应关系,就存在第三方网页工具把这些信息翻译成直接的下载链接。我最常用的是一个叫store.rg-adguard.net的在线服务,操作方法很简单:
- 打开微软商店网页版,搜索你需要的应用,复制详情页完整网址。
- 访问store.rg-adguard.net,把网址粘贴到输入框。
- 在下拉框里选择“Retail”(零售版),点击勾选按钮生成链接列表。
- 页面会列出多个文件,找到对应你系统架构的.msixbundle或.appxbundle文件,下载即可。
这个工具本质上是向微软官方服务器发起请求,然后展示CDN返回的链接清单,所以下载下来的安装包都是微软官方签名的原版文件,不是第三方二次打包的东西。安全性上有保障。
生成列表里一般会有很多文件,需要挑一下。对于普通应用,找文件名里带_x64或_x86字样的主包,后缀是.msixbundle或.appxbundle;如果系统是ARM架构的,找_arm64版本。千万别下错架构,装上去会报“程序包与当前系统不兼容”。
2.2 读懂安装包文件名,选对版本
这里说一下安装包文件名的规律,避免你下错。微软商店应用的安装包命名通常是这种格式:
应用名_版本号_架构___随机字符串.msixbundle举个例子,Windows Terminal的安装包长这样:
Microsoft.WindowsTerminal_1.20.11271.0_x64__8wekyb3d8bbwe.msixbundle拆开看:Microsoft.WindowsTerminal是应用系列名,1.20.11271.0是版本号,x64是目标架构,8wekyb3d8bbwe是微软的发布者ID(Publisher ID),每个微软应用的发布者ID是固定的。.msixbundle代表这是一个包含多个架构或语言资源的捆绑包,实际安装时系统会根据当前系统架构自动选择合适的那部分。
需要注意,列表里除了主包以外,通常还有一堆依赖包(Dependencies)。常见依赖包括:
Microsoft.VCLibs:Visual C++运行库的UWP版本,很多应用依赖它。Microsoft.UI.Xaml:UI框架库,新版WinUI应用必须依赖。Microsoft.Services.Store.Engagement:商店服务组件,部分应用需要。Microsoft.NET.Native.Framework和Microsoft.NET.Native.Runtime:.NET原生运行时。
看到这些依赖别头大,它们并不是全都需要装。Windows 10/11系统镜像里通常已经预装了VCLibs和.NET Native等基础依赖,实际安装主包时系统会自己判断缺不缺。只有报错提示“缺少依赖”时,才需要把对应架构的依赖包也下载下来一起装。
2.3 PowerShell命令安装并处理依赖
安装步骤其实就一条PowerShell命令。先按Win + X,选择“终端(管理员)”或者“Windows PowerShell(管理员)”,然后进入下载目录执行:
Add-AppxPackage -Path "C:\Users\你的用户名\Downloads\Microsoft.WindowsTerminal_1.20.11271.0_x64__8wekyb3d8bbwe.msixbundle"如果不缺依赖,命令执行完会直接结束,应用出现在开始菜单里,就算装好了。如果需要同时安装依赖包,命令变成这样:
Add-AppxPackage -Path "C:\主包路径.msixbundle" -DependencyPath "C:\依赖包1.msix", "C:\依赖包2.msix"-DependencyPath参数可以一次指定多个依赖包,用逗号分隔。这里有个细节:依赖包的架构必须和主包一致,如果你是在64位系统上安装,依赖包也要选x64版本。
如果安装时报错0x80073CF3(程序包不受信任)或者其他签名类错误,说明你下载的包和系统当前账户/开发者模式不匹配,需要开启开发人员模式,这个我在路线三里详细说。
我实际用这个方案装过不下二十次应用,踩过一次比较深的坑是:有些应用的主包会硬性要求某个版本的UI.Xaml,系统预装的版本不够新,导致安装失败。解决办法是把解析列表里所有Microsoft.UI.Xaml相关的依赖包全部下下来,不管版本高低,全部放进-DependencyPath里,系统会自动挑选需要的那个,基本都能解决。
3. 路线二:winget命令行安装
3.1 winget是什么,和商店什么关系
如果你不想手动找链接、下载文件,另一条更省事的路是用winget。winget的全称是Windows Package Manager,是微软官方推出的命令行包管理工具,Windows 10 1709以上版本可以通过应用安装程序(App Installer)获取,Windows 11基本都自带。
很多人不知道winget和微软商店的关系。实际上winget支持多个软件源,其中一个默认源就是msstore,它背后调用的正是微软商店的应用库。也就是说,你用winget安装商店应用时,虽然商店客户端图形界面没有弹出来,但下载和安装的链路还是走的微软官方服务。
这就带来一个好处:如果商店客户端本身损坏了打不开,但winget能正常工作,那就可以用winget把商店里的应用装上。反过来,如果winget的msstore源也报错,那就说明系统底层的商店服务组件有问题,反而要回过去修商店,或者走路线一绕过整个商店服务链路。
判断winget是否可用的命令是:
winget --version如果能输出版本号,说明工具已经就绪。
3.2 搜索、确认、安装一条龙命令
winget搜索商店应用的语法是:
winget search 应用关键词 --source msstore比如你想装Codex(这是近期比较热门的一个开发工具),可以执行:
winget search Codex --source msstore搜索结果会显示应用ID(Id列)、名称、版本号等信息。这里要注意,很多时候搜索出来的应用ID不是直观的英文名,而是一长串数字,因为商店应用的唯一标识就是前面说的ProductId。例如Codex的ID可能是9NZ9F3Z4W9KQ之类的数字串。
找到ID之后,安装命令是:
winget install --id 9NZ9F3Z4W9KQ --source msstore --accept-package-agreements --accept-source-agreements--accept-package-agreements和--accept-source-agreements这两个参数的作用是跳过交互式协议确认,批量部署时非常有用。不加也能装,但命令运行到中途会停下来让你按Y确认,要手动处理一下。
装完之后验证是否成功,可以直接执行:
winget list --id 9NZ9F3Z4W9KQ能看到版本信息就说明安装成功了。
3.3 什么时候winget反而更麻烦
winget虽然方便,但有几个限制你得提前知道。
首先,winget的msstore源并不覆盖商店里所有应用。有些应用因为许可协议或区域限制的原因,没向winget开放安装权限,会出现“找不到匹配的包”的提示。这种情况下只能回到路线一。
其次,winget安装时会额外下载一个叫“Microsoft Store License”的东西,也就是应用许可证文件。对于免费应用这没有任何影响,但对于那些“仅商店购买”的付费应用,winget装完可能只有试用版或者直接无法启动。
还有一个容易踩的坑:老版本的winget在处理商店源时偶尔会报0x801901F4错误,这是HTTP请求被拒导致下载失败。解决方式是先把winget升级到最新版,执行:
winget upgrade winget或者去GitHub下载最新的App Installer安装包手动更新。
我自己实测下来的感受是:winget最适合“我知道要装什么,只想敲一条命令让它自己搞定”的场景,尤其适合配合脚本批量部署。但如果winget报错、源不完整、或者你需要把安装包留档,那路线一的网页解析法更稳。
4. 路线三:开发者模式与旁加载
4.1 开启开发者选项
第三种路线更适合已经有安装包,或者需要安装自己打包应用的情况,核心是开启系统的“开发人员模式”,然后旁加载安装包。
先解释一下为什么要开开发者模式。默认情况下,Windows只允许安装“受信任商店签名”的应用,也就是从微软商店安装时系统会自动放行。当你手动用Add-AppxPackage命令安装一个未经过商店认证、甚至未签名的.msix包时,系统会拒绝安装,报出0x80073CF9这个经典的错误代码(无法安装,因为应用未通过系统验证)。开启开发人员模式后,系统放宽限制,允许旁加载本地的AppX/Msix包。
开启路径如下:
- 按
Win + I打开系统设置。 - 进入“隐私和安全性” -> “对于开发人员”(Windows 11)或“更新和安全” -> “针对开发人员”(Windows 10)。
- 勾选“开发人员模式”,弹出的警告框点“是”。
- 如果是Windows 11,相关选项会显示为“从任意源安装应用,包括松散文件”,把它打开即可。
需要注意的是,开启开发人员模式后系统会提示“是否启用设备门户”一类的问题,那个是给开发调试用的,跟旁加载无关,可以直接忽略。
4.2 直接双击安装和命令行安装的细节
开启开发者模式之后,安装本身变得非常简单。你可以直接双击下载好的.msixbundle文件,系统会弹出一个安装向导,点击“安装”按钮,进度条走完应用就装好了。
双击安装的底层逻辑其实还是调用Add-AppxPackage,只是图形界面帮你处理了参数。所以如果你装了多个依赖包,仍然建议用命令行一次性指定完,比较稳定。完整命令我前面写过:
Add-AppxPackage -Path "D:\packages\App.msixbundle" -DependencyPath "D:\packages\Dependency1.msix", "D:\packages\Dependency2_x64.msix"这里还有一个高级参数可以留意:-ForceApplicationShutdown。如果应用正在运行,直接覆盖安装会失败,加上这个参数可以强制关闭应用进程再安装,测试新版应用时我用得很多。
卸载的话,可以进设置->应用->已安装的应用,找到对应应用点击卸载。命令行卸载则用:
Get-AppxPackage *应用关键词* | Remove-AppxPackage注意这只对当前用户生效,不会动系统自带的商店本体,安全得很。
4.3 证书与信任问题
如果你拿到的是未签名或者自签名的安装包(比如你自己用MSIX打包工具打出来的包),开启开发者模式只是第一步,还得把安装包的证书导入系统的受信任根证书存储里,系统才认可这个包。
证书导入在Windows 11上可以直接右键.cer文件选择“安装证书”,然后在向导里选择“本地计算机”->“将所有证书放入下列存储”->“浏览”->“受信任的人”->“确定”。完成后再次执行安装命令,就不会报签名错误了。
这里要额外提醒一句:这条路线只适合安装来源可信的包。你自己打的包、公司内部分发的包、开发者提供的测试包,导入证书没问题;但网络上来源不明的msix文件和证书千万别乱装,这类文件经过签名认证后和商店正版应用具有同等系统权限,被恶意打包的话风险很高。
我在帮朋友排查时遇到过这样一个案例:他下载了一个第三方渠道的appx安装后,系统开始频繁弹广告、主页被锁定。我查了一下,那个包模仿了某知名工具的名字,但签名者完全不对,安装后又申请了系统通知权限和后台权限,妥妥的恶意行为。所以再次强调:优先用路线一拿微软官方签名包,别乱装来历不明的包。
5. 完整实操:两条最常用的落地路径
5.1 实操一:网页解析法安装Windows Terminal
为了让你有更直观的印象,我完整走一遍Windows Terminal的安装过程,这是最典型的“商店应用”场景。
第一步,打开微软商店网页版,搜索Windows Terminal,复制网址。Terminal的网址通常是:
https://apps.microsoft.com/detail/9n0dx20hk701第二步,访问store.rg-adguard.net,粘贴链接,选Retail,提交。等几秒后会生成一长串文件列表,我从中挑出需要的文件。以64位系统为例,要下载的是:
- Microsoft.WindowsTerminal_版本号_x64__8wekyb3d8bbwe.msixbundle
- 同列表里的Microsoft.VCLibs.140.00_版本号_x64__8wekyb3d8bbwe.appx(如果系统提示需要)
- 同列表里的Microsoft.UI.Xaml_版本号_x64__8wekyb3d8bbwe.appx(如果系统提示需要)
第三步,下载完毕后,打开管理员PowerShell,进入下载目录,执行:
Add-AppxPackage -Path "$env:USERPROFILE\Downloads\Microsoft.WindowsTerminal_1.20.11271.0_x64__8wekyb3d8bbwe.msixbundle"正常情况下命令在十几秒内执行完成。如果命令报错提示依赖缺失,再执行:
Add-AppxPackage -Path "$env:USERPROFILE\Downloads\Microsoft.WindowsTerminal_1.20.11271.0_x64__8wekyb3d8bbwe.msixbundle" -DependencyPath "$env:USERPROFILE\Downloads\Microsoft.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe.appx", "$env:USERPROFILE\Downloads\Microsoft.UI.Xaml_8.2310.30001.0_x64__8wekyb3d8bbwe.appx"第四步,去开始菜单找“终端”,打开能正常显示命令行界面,就说明安装成功。
这套流程里唯一需要动脑的就是文件选择,其余全是一步步照着敲命令。你把这个实操跑通一遍,以后任何商店应用都能按这个套路装。
5.2 实操二:winget装Codex命令行工具
第二个场景贴近最新的热点——装Codex。这里我用的是最近讨论度很高的那个命令行AI编码工具,很多Windows用户在安装时被商店卡住,于是都想知道怎么绕过商店直接装。
用winget安装的完整过程是:
winget search Codex --source msstore如果搜索成功,会返回类似这样的结果:
名称 ID 源 Codex 9NZ9F3Z4W9KQ msstore然后执行安装:
winget install --id 9NZ9F3Z4W9KQ --source msstore --accept-package-agreements --accept-source-agreements安装过程会输出进度,最终显示“已成功安装”,终端里直接敲codex就能启动。
如果你的机器执行完显示“找不到匹配的包”,说明这个应用在winget的msstore源里不可用,那就退回路线一:去商店网页版手动找链接,再用解析工具下载安装包。或者留意一下官方有没有提供其他分发渠道,比如很多开发工具其实也会提供zip或exe版本,不一定非得走商店。
这里有一个细节:winget安装商店应用时,如果系统的App Installer组件版本过老,可能提示0x8B010001错误。解决方式是去微软商店搜索“应用安装程序”更新,或者用PowerShell执行:
Get-AppxPackage Microsoft.DesktopAppInstaller | Add-AppxPackage -Register -Verbose这条命令会重新注册系统里的App Installer,通常能解决winget失灵的问题。
6. 高频问题排查与避坑笔记
6.1 商店打不开和更新服务异常的处理
既然问题是绕过商店,不少人还是绕不过去“商店本身坏了”这一步。这里把常见的报错和排查手段理一下,方便你遇到时对症下药。
- 微软商店打不开,点了没反应或闪退:先用
wsreset.exe清一下商店缓存。方法是按Win + R,输入wsreset.exe回车,会弹出一个黑的或蓝的窗口,等它自动跑完商店会重新打开。这个操作不会影响已安装的应用和账号数据。如果还是打不开,执行PowerShell命令重装商店本体:
Get-AppxPackage Microsoft.WindowsStore | Add-AppxPackage -Register -Verbose提示“其中一个更新服务未正常运行”:这个报错基本是Microsoft Store Install Service(安装服务)出了问题。按
Win + R输入services.msc,在服务列表里找到“Microsoft Store Install Service”(中文系统叫“Microsoft Store 安装服务”),确认它的状态是“正在运行”,启动类型是“手动”(默认就是手动,别改成自动,反而可能出问题)。服务没跑的话右键启动。如果起不来,去设置->应用->已安装的应用里找到“应用商店”,然后选择“高级选项”->“修复”,让系统自动修一遍。应用下载一直卡在“等待中”:检查时间和区域设置是否自动正确,再检查网络连接是否正常。商店服务对系统时间敏感,时间不准会导致HTTPS证书校验失败。另外登录微软账号后重试,部分应用需要账号授权才能下载。
这些手段属于常规医疗手段,能救回一部分“商店半死不活”的机器。但如果你就是不想跟商店纠缠,直接跳到第2节的网页解析法就行,不需要把商店修好才能装应用。
6.2 安装报错代码速查表
手动安装msix包时常见的报错,我整理了一个速查表,建议收藏。遇到错误别慌,对着表看基本就能定位。
| 错误代码 | 含义 | 处理方法 |
|---|---|---|
| 0x80073CF3 | 程序包不受信任 | 检查是否开启开发人员模式;检查包来源是否可信 |
| 0x80073CF9 | 无法安装,系统验证未通过 | 开启开发人员模式,配置好证书信任 |
| 0x80073CFB | 程序包与系统架构不匹配 | 下载对应x64/arm64架构的安装包 |
| 0x80073D19 | 系统找不到所需依赖项 | 下载并添加对应依赖包到DependencyPath |
| 0x80073D0D | 已有更高版本安装 | 先卸载现有版本,再安装存储的旧版本;或下载更新的包 |
| 0x800B0100 | 签名证书无效或缺失 | 导入开发者证书,或改用官方源下载 |
| 0x801901F4 | HTTP请求被拒绝 | 检查网络代理和DNS;稍后重试;更新winget |
| 0x8B010001 | App Installer组件问题 | 重装或重新注册Microsoft.DesktopAppInstaller |
你在安装时如果碰到表格里没有的错误代码,还有个通用排查法:去事件查看器(运行eventvwr.msc)-> Windows日志 -> 应用程序,找来源为AppXDeployment或AppXDeploymentServer的错误事件,里面会写明具体卡在哪一步,比错误代码更详细。
6.3 几条独家避坑心得
最后分享几个我在实操中总结出来的习惯性做法,都是文档里不会写但能救命的细节。
第一,别动商店系统包。有些“优化工具”会把Microsoft Store整个卸载掉,说可以“精简系统”,我强烈不建议这么干。商店客户端本身虽然可以绕过,但很多底层组件和系统更新服务之间有联动,你删了Store包,以后系统补丁更新、Defender更新可能跟着出问题。想绕过商店客户端,不代表要删除商店本体,二者不是一回事。
第二,解析页面下载的链接有过期时间。store.rg-adguard.net生成的CDN链接不是永久有效的,通常是几小时到一天,超过时间再点会报404。如果链接失效了,回到页面重新提交一次就能生成新链接。我习惯的做法是下载时顺便把链接存到一个文本文件里,哪天发现失效了就重新生成,不用重新整个流程。
第三,新版本覆盖旧版本时,先确认版本号大小再安装。Add-AppxPackage对“降级安装”是严格拒绝的,如果你手里有一个旧安装包,但系统里已装了新版,直接装旧包会报错。想要回退版本,得先PowerShell卸载现有版本再装旧包。同理,商店应用自动更新后,如果你再手动装同样版本的老包,也会被系统拒绝。
第四,批量部署一定要做依赖清单。我在帮多台机器批量装应用时,会把主包和所有依赖包放在同一个文件夹,写一个简单的脚本循环安装,脚本里用-DependencyPath一次性指好依赖。这样做的好处是,即使后续有机器缺少某个VC运行库,也不会中途报错中断,整个过程无人值守就能跑完。
我的经验是,这三种路线不是互斥的,而是互补的。日常桌面维护,winget最快最省心;需要离线安装包或者商店整个瘫痪时,网页解析法最稳;要是你本来就在做应用打包或者测试,开发者模式旁加载就是标配。把这三条路都跑通,微软商店这个“货架”坏不坏,基本就不再影响你装软件了。
最后再补充一个小技巧:很多商店应用的官方网页版和商店客户端是不冲突的,网页版随时可以打开,哪怕你电脑上的商店已经彻底打不开,网页版也能正常访问。所以遇到任何商店问题,第一步先打开网页版确认这个应用确实存在,然后再走对应路线,心里就有底了。