多数 Windows 用户都以为点击 “卸载” 按钮就能把软件完全删除,但对于微软应用商店分发的新式 MSIX 格式应用来说,事实并非如此。
传统 Windows 软件依靠 MSI 安装程序,拥有一套简单直接的卸载流程。卸载基于 MSI 的程序时,系统会删除程序二进制文件、移除相关文件夹、清理注册表项,抹除该应用留下的所有残留数据。与之相反,MSIX 技术通过一套独特的四阶段流程管理应用生命周期,彻底改变了卸载的运行逻辑:

1、部署(Stage):将应用全部文件安装至本地存储磁盘
2、注册(Register):把已安装应用绑定到设备上某一个特定用户配置文件
3、注销注册(Deregister):切断应用与单个用户账户之间的关联
4、清理移除(Destage):从磁盘中永久删除应用原始文件
点击卸载按钮时,系统会调用后台接口函数RemovePackageAsync,而该函数默认仅执行注销注册这一步。只有当 Windows 确认没有其他系统组件或用户账户仍在调用该应用文件时,关键的清理移除阶段才会自动启动。
多用户电脑是卸载不彻底最典型的场景。如果另一账户仍注册了这款 MSIX 应用,你在自己账户里卸载它,只是让软件对你隐藏而已。该程序会从你的开始菜单和应用列表中消失,但完整的文件包依旧保存在硬盘里。这也解释了为什么很多用户卸载软件后,发现磁盘空间几乎没有得到释放。
即便是仅设有单个用户账户的设备,也可能留存所谓 “已卸载” 的 MSIX 应用。.NET 运行库这类共享依赖项可能会调用该应用文件,因此 Windows 会跳过清理移除步骤,避免损坏其他系统工具或程序。
在用户视角看来,软件仿佛已经彻底删除,但操作系统仍保留着完整核心文件,以备相关进程或其他用户账户调用。MSIX 打包机制的这一特殊特性,造成了用户所见结果与电脑实际留存数据之间的偏差。
相关链接:
https://devblogs.microsoft.com/insidemsix/remove-is-not-uninstall/


夜雨聆风