使用 DISM 管理 APPX 与 MSIX 包
前言
如果你的应用程序包名、或者文件路径中含有空格,请将空格改为连接符(-)或下划线(_)
Windows PE 4.0、Windows Server 2012 服务器核心安装选项或任何低于 Windows 8 和 Windows Server 2012 的 Windows 版本的 Windows 系统都不支持
如果仅有 /Image:<系统盘盘符>:
或 /Online
参数,则代表另一个参数不可用
关于参数
[/<参数>] 是可选的参数;[/<参数 1> | /<参数 2>] 是两个参数二选一,例如
- [/Image:<系统盘盘符>: | /Online] 代表这两个参数只能二选一,如果我选项前面的参数则就是 /Image:<系统盘盘符>:
{</参数>[</参数>] | </参数>[</参数>]} 代表花括号内参数二选一,中括号内参数可选
如果你是为挂载的映像添加,请将<系统盘盘符>:
替换为挂载路径,如 C:\Temp\Mount
(Windows 等文件夹的上层目录)
/Image:
参数仅允许在 PE 下使用,或对挂载的镜像使用;/Online
参数仅允许对当前正在运行的系统(联机映像)使用
/Get-Help /?
获取帮助
语法:
1 | Dism /Image:<系统盘盘符>: /Add-ProvisionedAppxPackage /? |
1 | Dism /Online /Get-ProvisionedAppxPackages /? |
/Get-ProvisionedAppxPackages
获取映像中为每个用户安装的应用程序包的相关信息
语法:
1 | Dism /Image:<系统盘盘符>: /Get-ProvisionedAppxPackages |
1 | Dism /Online /Get-ProvisionedAppxPackages |
/Add-ProvisionedAppxPackage
将一个或多个应用程序包添加到映像
若应用到未进入 OOBE 的系统或挂载的映像,每个现有的或新的用户配置文件都将注册该应用;如果将应用添加到联机映像,则在当前用户下次登录之前,将不会为此用户注册应用
若你使用的是 /Online
参数,且进入系统后不联网,则需要使用 /LicensePath
参数来指定许可证,否则可能会无法打开应用程序;如果为 UUP 集成的,可以在 UUP 的 UUPs\Apps 文件夹下找到 License.xml(可能不通用于不同软件间)
语法:
1 | Dism /Add-ProvisionedAppxPackage {/FolderPath:<已解包的应用程序包路径> [/SkipLicense] | /PackagePath:<应用程序包路径> [/DependencyPackagePath:<应用程序包运行时路径>] [/LicensePath:<许可证路径> | /SkipLicense]} |
其它参数及注解
/CustomDataPath:<自定义数据文件路径>
可跟在/FolderPath
或/PackagePath
的/SkipLicense
或/LicensePath
的参数后[/Region:"<区域>"]
可跟在/FolderPath
或/PackagePath
的命令最末尾处- 使用 /Region 指定必须在其中预配应用包( .appx 或 .appxbundle)的区域。 区域参数可以是:
·All
,指示应为所有区域预配应用
· 以分号分隔的区域列表, 区域将采用 ISO 3166-1 Alpha-2 或 ISO 3166-1 Alpha-3 代码形式; 例如,可以将美国指定为“US”或“USA”(不区分大小写),如果未指定区域列表,则只有在将包固定到“开始”菜单布局时,才会对其进行预配
- 使用 /Region 指定必须在其中预配应用包( .appx 或 .appxbundle)的区域。 区域参数可以是:
/DependencyPackagePath:<应用程序包运行时路径>
只能跟在/PackagePath
的参数后,指定该应用程序包需要的应用程序包运行时,所需运行时在应用程序包内的AppxManifest.xml
中列出,参数可叠加/LicensePath:<许可证路径>
可跟在/FolderPath
或/PackagePath
的参数后,所需的许可证应为.xml
,/SkipLicense
可跟在/FolderPath
或/PackagePath
的参数后,在其它方案中使用可能会损坏映像
假如,我的系统盘盘符为 C,应用程序包放在 D:\Appx
下,应用程序包名为 Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbwe.Appx
,没有许可证文件,则我的命令如下
1 | Dism /Image:C: /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbwe.Appx /SkipLicense |
抑或是
1 | Dism /Online /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbwe.Appx /SkipLicense |
其它示例
完整示例:
1 | Dism /Add-ProvisionedAppxPackage /FolderPath:D:\Appx\UnpackedAppx /CustomDataPath:D:\Appx\CustomData\CustomData.xml /LicensePath:D:\Appx\License\License.xml /Region:"All" |
1 | Dism /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Appx.appx /DependencyPackagePath:D:\Appx\Runtime\Framework-1.appx /DependencyPackagePath:D:\Appx\Runtime\Framework-2.appx /SkipLicense /Region:"US;GB" |
/FolderPath:
1 | Dism /Image:C: /Add-ProvisionedAppxPackage /FolderPath:D:\Appx\UnpackedAppx /CustomDataPath:D:\Appx\CustomData\CustomData.xml /LicensePath:D:\Appx\License\License.xml |
1 | Dism /Online /Add-ProvisionedAppxPackage /FolderPath:D:\Appx\UnpackedAppx /SkipLicense |
/PackagePath:
1 | Dism /Image:C: /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Appx.appx /DependencyPackagePath:D:\Appx\Runtime\Framework-1.appx /DependencyPackagePath:D:\Appx\Runtime\Framework-2.appx /LicensePath:D:\Appx\License\License.xml |
1 | Dism /Image:C: /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Appx.appx /SkipLicense |
1 | Dism /Online /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Appx.appx /Region:"All" /SkipLicense |
1 | Dism /Online /Add-ProvisionedAppxPackage /PackagePath:D:\Appx\Appx.appx /LicensePath:D:\Appx\License\License.xml /Region:"US;GB" |
/Remove-ProvisionedAppxPackage
从映像中删除应用程序包的预配,并不会注册到创建的新用户帐户
语法:
1 | /Remove-ProvisionedAppxPackage /PackageName:<应用程序包全名称> |
若我的应用程序包全名称为 Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbewe
,则命令如下
1 | Dism /Image:C: /Remove-ProvisionedAppxPackage /PackageName:Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbwe |
抑或是
1 | Dism /Online /Remove-ProvisionedAppxPackage /PackageName:Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbwe |
在 PowerShell 中使用 Remove-AppxPackage 为已注册应用程序包的每个用户删除应用程序,以便从映像中完全删除该应用程序
如果尚未将应用程序包注册到任何用户配置文件,则/Remove-ProvisionedAppxPackage
选项将完全删除应用程序包,而非仅删除预配
疑难解答
如果遇到 错误: 0xc1570118
的报错,则可能是由于目标应用程序包已安装导致