
预装 Appx 应用
缘起
之前用一个比较老的红米笔记本,上面被我装了 Windows 10 LTSC 2019。LTSC 嘛,都知道,UWP 软件除了设置一个都没有。于是折腾半天把 Appx 全部下下来装上了。
不过那个时候我正好还在研究 RDP,因此创建了一个新用户。然后就发现问题了……
用 Add-AppxPackage 命令安装的 Appx 软件,乍一看没什么,不过当你切换了用户的时候就露馅了,刚刚安装好的这些软件一个都没有。
因为 Appx 本质是商店软件,哪怕是免费软件背后也有相应的授权机制,单纯的安装一个 Appx 只会把这个软件绑定到当前用户上,切换了这些软件就不显示了。
这也是为什么安装 Appx 应用很神奇的不需要管理员权限,如果简单的拿类似 DPKG/APT 这种模式来思考的话肯定想不明白。
不过与此同时我们也发现,系统自带的软件不管在哪个用户里登录都会出现。可能你会觉得系统自带的应用和别的应用不一样,但是刚才我们已经从 LTSC 中发现,除了“设置”是真的不一样外,别的所有自带软件都只是普通的商店软件。
那么这些软件是如何做到对每一个用户都可用呢?
原理
原理比你想象中的很可能要简单得多。
在把一个 Appx 包注册为预装软件之后,系统就会在某个用户第一次登录系统的时候,把所有这些软件装一遍。
对没错,就是这么的简单粗暴,就是自动装一遍这些“预装”软件……
Windows 8.x/10 有一个很经典的“别来无恙啊”的闪来闪去的界面,11 改成了一堆蓝色的球飘来飘去,你以为这个界面只是好看吗?其实就是 Windows 在后台偷偷装这些软件!
事实上 Windows 8.x 在这个地方很诚实,下面的小字写的就是“正在安装应用”。不知道为什么 10 改了……
预配 Appx
微软官方不管这个流程叫“预装”,叫“预配”。
这个流程会修改 Windows 系统本身,因此需要管理员权限。
Add-AppxProvisionedPackage -Online -FolderPath "C:\Appx" -SkipLicense
Add-AppxProvisionedPackage -Online -PackagePath "C:\Appx\1.appx" -SkipLicense记得把路径替换成你的实际路径。
注意 -Online 这个参数,不能省略,因为尽管这个命令看起来很像 Appx 模块里面的一个命令,由于涉及修改 Windows 本身,它其实是 Dism 模块里的, -Online 这个参数代表要操作的 Windows 映像是当前正在运行的映像。
如果采用文件夹模式,那么非常简单,把你的 Appx 一股脑全部丢进去就好了。
文件模式比较复杂,如果有依赖的话需要用 -DependencyPackagePath 这个参数指定依赖项,不推荐用。
另一个需要关注的是 -SkipLicense 这个参数,由于前面已经说过,Appx 作为商店应用是会涉及到授权问题的,要么指定许可证,要么指定跳过。由于 License.xml 这个许可证文件不 开放获取,因此这里指定跳过许可证,只要你确保你的 Appx 都是免费应用就不会有问题。
在付费/需要授权的软件上使用 -SkipLicense 会损坏系统!
这样的话,下次新建用户登录的时候,就会在“剑阁峥嵘而崔嵬”之后看到这些软件了!
当然,因为是 Dism 模块,直接拿 DISM.exe 操作也是可以的:
DISM.exe /Online /Add-ProvisionedAppxPackage /FolderPath:C:\Appx /SkipLicense
DISM.exe /Online /Add-ProvisionedAppxPackage /PackagePath:C:\Appx\1.appx /SkipLicense结语
我当初为什么要脑子一抽让我每次都写这么一个牛魔结语啊!
有什么好结语的又不是上课

