# wsappx CPU 占用高，它在忙什么，什么时候会停

任务管理器里的 wsappx 不是病毒，也不是你自己装的软件，它是 Windows 给运行 Microsoft Store 部署和许可服务的那个服务宿主起的名字，CPU 或磁盘占用一高，最常见的原因是应用商店在后台安装、更新或卸载某个应用，这件事做完占用就会降下来，所以要弄清的是哪个服务在忙、它在装什么、这项工作最后有没有结束。

## wsappx 里跑的是什么

主要是两个服务，微软的[服务说明文档](https://learn.microsoft.com/en-us/windows-server/security/windows-services/security-guidelines-for-disabling-system-services-in-windows-server)对它们的描述如下：

| 服务 | 服务名 | 微软的说明 | 启动类型 |
| --- | --- | --- | --- |
| AppX Deployment Service | `AppXSvc` | 为部署应用商店应用提供基础支持 | 手动 |
| Client License Service | `ClipSVC` | 为 Microsoft Store 提供基础支持 | 手动 |

手动的意思是按需启动，电脑空闲时它们不该整天忙个不停，有应用商店的活要干才会醒来，比如安装或更新应用、卸载商店应用，或者检查从商店购买的应用的许可。部署一个应用包要把文件写到磁盘上，所以同样一件事，除了 CPU，也可能表现成磁盘占用高。

## 先确认是哪个服务在忙

按 `Ctrl + Shift + Esc` 打开任务管理器，在进程页按 CPU 排序，记下时间。如果最忙的是 wsappx 对应的服务宿主，就到“详细信息”页找到它的进程 ID，也就是那个 PID 的 `svchost.exe`，再看“服务”页，那里每个服务后面都写着运行它的 PID。

[tasklist 命令](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tasklist)一步就能回答同一个问题，在命令提示符里运行：

```cmd
tasklist /svc /fi "SERVICES eq AppXSvc"
tasklist /svc /fi "SERVICES eq ClipSVC"
```

每一行会列出映像名、PID 和这个进程里的服务，拿 PID 和任务管理器里占 CPU 的那个对一下，对上 `AppXSvc` 说明正在部署或移除应用包，对上 `ClipSVC` 说明是在处理商店应用的许可。

Mole 的状态页换了个角度显示同一件事，系统会话里的 Windows 服务宿主会合并成一行，点开这一行的详情，会按进程忙碌程度从高到低列出里面的服务，`AppXSvc` 或 `ClipSVC` 直接写着名字，不用对着一列一模一样的 `svchost.exe` 猜。这一行属于 Windows 服务，Mole 不会给它提供结束进程的选项。

## 看应用商店在忙什么

大多数 wsappx 占用高峰都对得上商店更新，微软说正在[把应用更新改为自动进行](https://support.microsoft.com/en-us/accounts-billing/get-updates-for-apps-and-games-in-microsoft-store)，好让安全补丁及时到位，所以你不打开商店，更新也可能自己开始。系统自带的纸牌、To Do、Xbox 这些应用也是商店应用包，这就是为什么从没在商店里装过东西的电脑，也会看到这个高峰。

1. 打开 Microsoft Store。
2. 点“检查更新”，看看正在下载或安装什么。
3. 等队列跑完，再观察几分钟 wsappx。

队列清空以后 CPU 降下来，就说明没有问题，服务只是把自己的活干完了，一个大应用更新之后出现一次高峰是正常的。

卸载商店应用走的也是这个服务，Mole for Windows 卸载商店应用时，请求同样交给部署服务处理，如果商店正在安装或更新别的应用，Windows 会让它排在后面，所以卸载一个应用也可能让 wsappx 的占用短暂升高。

## 真想关掉商店自动更新

如果后台更新总在不合适的时候开始，比如用着按流量计费的网络，或者正在演示，微软的[自动更新说明](https://support.microsoft.com/en-US/Windows/Apps/turn-on-automatic-app-updates)给了开关的位置，打开 Microsoft Store，点自己的头像，选“设置”，修改“应用更新”。微软也提到应用更新正在变成自动的，需要时可以暂停，所以你那个版本的商店里看到的可能是暂停选项，而不是关闭开关。

这样做是拿现在的 CPU 高峰去换以后的旧版本应用，商店应用的安全修复就是靠这些更新送到的。折中一点的办法是保持自动更新，在自己方便的时候手动点一次“检查更新”，让这项工作在你不用电脑的时候做完。

## 一直降不下来

商店里看不到任何任务，wsappx 却连着几个小时都很忙，就是另一种情况了，可以找这几样：

- 同一个应用在商店的下载列表里反复重试更新。
- 商店报错或者下载卡住，[应用更新失败那篇](/zh/windows/blog/windows-app-update-failures)按阶段讲了怎么查。
- C 盘空间不足，应用包部署会变慢甚至失败，可以看 [C 盘空间分类排查](/zh/windows/blog/windows-c-drive-full)。

一次只改一样，再用同样的方法看一遍，某个卡住的应用装完或者被移除以后 wsappx 安静下来，原因就找到了。从 CPU 占用一路追到具体程序的通用方法，看 [Windows CPU 占用高](/zh/windows/blog/windows-high-cpu-usage)，如果一直满的是磁盘，[磁盘一直 100%](/zh/windows/blog/windows-disk-100-percent) 讲了怎么分清活动时间和真实读写。

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-wsappx-high-cpu-windows-zh-mobile.webp" type="image/webp" width="768" height="1500">
    <img src="/img/blog/windows-wsappx-high-cpu-windows-zh.webp" width="1360" height="454" loading="lazy" alt="弄清商店服务在做什么">
  </picture>
  <figcaption>先确认进程，再找出具体服务，看商店的任务队列，等它跑完以后再量一次。</figcaption>
</figure>

## 不要这样做

- 不要在服务管理器里禁用 `AppXSvc` 或 `ClipSVC`，也不要去注册表改它们的 `Start` 值，微软说得很直接，部署服务被禁用，商店应用就装不上，也可能无法正常工作，许可服务被禁用，从商店购买的应用会运行不正常。
- 不要为了让数字好看就在任务管理器里结束 wsappx 服务宿主，这会让正在进行的安装或更新断在一半，商店之后还会重新开始。
- 不要为了不再更新，就用脚本把系统自带的商店应用全删掉，有些应用包是 Windows 的一部分，系统会拒绝移除，Mole for Windows 的软件页也不列出 Microsoft Store、应用安装程序和 Windows 安全中心，在那里不会被误删，一次短暂的高峰不值得把系统拆开。
- 不要把短暂的高峰当成故障，盯着商店的任务队列，观察几分钟再下结论。

## 常见问题

### wsappx 是什么，为什么 CPU 占用这么高？

它是 AppX Deployment Service 和 Client License Service 的服务宿主，负责 Microsoft Store 应用的安装、更新、移除和许可，CPU 高通常说明有商店应用正在更新或安装，做完就会降下来。

### 可以禁用 wsappx 吗？

不建议，微软说这些服务被禁用后，商店应用无法部署，也可能无法正常工作，购买的商店应用也会运行不正常。想控制更新什么时候发生，用商店设置里的暂停或关闭自动更新。

### wsappx CPU 占用高是病毒吗？

真正的 wsappx 服务跑在 Windows 文件夹里的 `svchost.exe` 中，用 `tasklist /svc` 能看到服务名。如果占用高的进程在别的位置，或者服务列表里没有 `AppXSvc` 和 `ClipSVC`，就把它当成来路不明的程序另行排查。

### 我从不用 Microsoft Store，为什么 wsappx 还在运行？

纸牌、To Do、Xbox 这些系统自带的应用都是商店应用包，就算你从不打开商店，它们也通过同一组服务更新。


Canonical: https://mole.fit/zh/windows/blog/wsappx-high-cpu-windows
