乐于分享
好东西不私藏

Win11点了"卸载",应用其实没走?微软自己承认了

Win11点了"卸载",应用其实没走?微软自己承认了
说实话,我今天看到微软官方发的一篇博文,差点没从椅子上蹦起来。
8月4号,微软工程师Howard Kapustein在官方博客发了篇文章,标题翻译过来就叫《移除不等于卸载》。说的啥呢?说的就是你在Win11里点了"卸载"按钮,以为应用被删干净了——其实大概率没有。文件还躺在你硬盘里呢。
这事儿吧,得从Win11里两种安装包格式说起。

老格式MSI和新格式MSIX,卸载逻辑完全不一样

咱们以前装的软件,基本都是MSI格式的。这玩意卸载的时候很干脆——删文件、清目录、扫注册表、移除运行库组件,一条龙服务,卸完就是卸完了。
但微软这几年推了个新格式叫MSIX,Microsoft Store里的应用基本都是这个格式。这玩意用了容器化技术,安装和卸载的逻辑跟传统MSI完全两码事。
微软自己把MSIX的生命周期分成四步:
第一步,Stage(部署) :把应用文件安全地放到硬盘上。
第二步,Register(注册) :把这个应用和你的用户账户关联起来。
第三步,Deregister(注销) :解除应用和你账户的关联。
第四步,Destage(卸载) :把应用文件从硬盘上彻底删掉。
重点来了——你点"卸载"按钮的时候,系统调用的API叫RemovePackageAsync,它只执行第三步"注销"。也就是说,系统只是把这个应用从你的开始菜单、文件关联、用户列表里摘掉了。至于第四步"真正删文件"?看心情。

什么情况下文件不会被删?

微软说了,只有当系统确认"没有其他程序需要这些文件"的时候,才会执行Destage,真正把文件删掉。
举个例子:你装了应用A,应用A依赖一个.NET运行时框架包。后来你又装了应用B,应用B也依赖同一个框架包。这时候你把应用A卸载了,框架包不会被删——因为应用B还在用。
更离谱的是,就算你电脑上只有一个账户,也可能触发这个情况。因为像Visual C++ Redistributable、Windows App SDK这些底层组件也是MSIX格式打包的,很多应用共享。你卸了A,但B还在用同一个组件,文件就留着。
所以你会发现一个很诡异的现象:卸载了一个挺大的应用,结果硬盘空间几乎没变化。你以为卸载失败了?不,卸载成功了——只是文件还在。

微软为什么这么设计?

说白了,这是一种"保守策略"。
你想啊,如果每次卸载都把所有关联文件一刀切删干净,那下一个应用再需要这个共享组件的时候,就得重新下载、重新安装。万一装的过程中出了岔子,应用直接打不开,用户又得来骂街。
不如留着。反正MSIX格式的应用本身经过了优化,占的空间不算特别夸张。留着共享组件,下次装新应用的时候直接复用,又快又稳。
从系统稳定性的角度看,这个设计确实有道理。但从用户体验的角度看——你倒是告诉我一声啊!我点了卸载,空间没变,还以为中了什么邪。

普通用户需要担心吗?

不用太担心。这些MSIX格式的应用文件都是经过安全封装的,不会像传统软件那样往系统里到处写注册表、散文件。它就像装在一个密封盒子里,即使文件还在硬盘上,也不会对你的系统造成什么影响。
但如果你是有"硬盘洁癖"的人,看到空间少了一块就难受,那可以试试在PowerShell里用Get-AppxPackage命令看看还有没有残留的包。不过说实话,除非你硬盘空间真的捉襟见肘,否则没必要专门去清理——微软这个机制虽然有点"偷偷摸摸",但出发点是为了系统稳定。
最后问一句:你觉得这种"你以为删了其实没删"的设计,是合理还是多此一举?评论区说说。