DISM 应用包(.appx 或 .appxbundle)服务命令行选项

你可以使用应用包服务命令在 Windows 映像中添加、删除和列出预配的应用包(.appx 或 .appxbundle)。 .appxbundle 是应用和资源包的集合,两者一起用于丰富应用体验,同时最大限度减少在给定电脑上的磁盘占用空间。 有关 .appxbundle 包和 Microsoft Store 管道的详细信息,请参阅应用打包。 使用 DISM 预配捆绑时,只能将 .appxbundle 中包的一个子集添加到映像。 有关详细信息,请参阅了解 DISM 如何将 .appxbundle 资源包添加到映像

将预配的应用包添加到 Windows 映像,并在下次用户登录时为每个新的或现有的用户配置文件安装应用包。 有关详细信息,包括应用包预配要求,请参阅使用 DISM 旁加载应用

你也可以使用 PowerShell 在 Windows 安装中添加、删除和列出每个映像或用户的应用包(.appx 或 .appxbundle)。 有关详细信息,请参阅 Windows PowerShell 中的部署映像服务管理 (DISM) CmdletWindows PowerShell 中的应用安装 Cmdlet

DISM 服务语法

使用 DISM 来维护 Windows 映像的基本语法为:

DISM.exe {/Image:<path_to_image_directory>|/Online} [dism_global_options] {servicing_option} <servicing_argument>]

脱机映像选项

以下应用包(.appx 或 .appxbundle)服务选项可用于脱机映像。

DISM.exe /Image:<path_to_image_directory> [/Get-ProvisionedAppxPackages | /Add-ProvisionedAppxPackage | /Remove-ProvisionedAppxPackage | /Set-ProvisionedAppxDataFile | /StubPackageOption]

联机映像选项

以下应用包(.appx 或 .appxbundle)服务选项可用于运行的操作系统。

DISM.exe /Online [/Get-ProvisionedAppxPackages | /Add-ProvisionedAppxPackage | /Remove-ProvisionedAppxPackage | /Set-ProvisionedAppxDataFile | /StubPackageOption]

/Get-Help /?

在应用包服务命令行选项之后立即使用时,将显示有关选项和参数的信息。 指定映像后,其他主题可能会变得可用。

Dism /image:C:\test\offline /Add-ProvisionedAppxPackage /?
Dism /online /Get-ProvisionedAppxPackages /?

/Get-ProvisionedAppxPackages

显示映像中设置为每个新用户安装的应用包(.appx 或 .appxbundle)相关的信息。

Dism /Image:C:\test\offline /Get-ProvisionedAppxPackages

/Add-ProvisionedAppxPackage

将一个或多个应用包添加到映像。

将应用添加到 Windows 映像,并在下次用户登录时向每个现有的或新的用户配置文件注册该应用。 如果将应用添加到联机映像,则在当前用户下次登录之前,将不会为此用户注册应用。

在处于审核模式下的联机操作系统上预配应用,以便可以为包含完全相同的文件的应用创建相应的硬链接(以最大程度减少磁盘空间使用量),同时确保没有任何应用运行,以成功进行安装。

语法:

dism.exe /Add-ProvisionedAppxPackage {/FolderPath:<App_folder_path> [/SkipLicense\] [/CustomDataPath:<custom_file_path>]  /PackagePath:<main_package_path> [/DependencyPackagePath:<dependency_package_path>] {[/LicensePath:<license_file_path>] [/SkipLicense\]} [/CustomDataPath:<custom_file_path>]} [/Region:<region>]
  • 使用 /FolderPath 为包含主包、任何依赖关系包和许可证文件的解包应用文件指定一个文件夹。 此操作仅支持解包的应用包。

  • 使用 /PackagePath 指定应用包(.appx 或 .appxbundle)。 在联机预配业务线应用时可使用 /PackagePath

    重要

    使用 /PackagePath 参数预配 .appxbundle 包。 此外,不能使用 /PackagePath 预配应用的依赖关系包,必须使用 /DependencyPackagePath 参数进行预配。

  • 在运行 Windows 预安装环境 (WinPE) 4.0、Windows Server 2008 R2 或早期版本的 Windows 的主机电脑中不支持 /PackagePath

  • 使用 /Region 指定必须在其中预配应用包( .appx 或 .appxbundle)的区域。 区域参数可以是:

    • all,指示应为所有区域预配应用,或
    • 以分号分隔的区域列表。 区域将采用 ISO 3166-1 Alpha-2 或 ISO 3166-1 Alpha-3 代码形式。 例如,可以将美国指定为“US”或“USA”(不区分大小写)。 如果未指定区域列表,则只有在将包固定到“开始”菜单布局时,才会对其进行预配。
  • 使用 /DependencyPackagePath 指定要预配的应用所需的每个依赖关系包。 可以通过查看应用 .appx 包的根目录中的 AppxManifest.xml 中的 <PackageDependency> 元素,找到应用所需的依赖关系包。 如果多个应用都共享相同的依赖关系,则应安装依赖关系包的每个主要版本的最新次要版本。 例如,App1、App2 和 App3 都具有对 Microsoft.NET.Native.Framework 的依赖关系。 App1 指定带有次要版本 25512.0 的 Microsoft.NET.Native.Framework.1.6,App2 指定带有次要版本25513.0 的 Microsoft.NET.Native.Framework.1.6,App3 指定带有次要版本 24202.0 的 Microsoft.NET.Native.Framework.1.3。 由于 App1 和 App2 指定依赖关系包的同一主要版本,因此应仅安装最新的次要版本 25513.0,而 App3 指定依赖关系包的其他主要版本,因此也必须安装该版本。 所以应安装的依赖关系包为带有次要版本 25513.0 的 Microsoft.NET.Native.Framework.1.6 和带有次要版本 24202.0 的 Microsoft.NET.Native.Framework.1.3。

    如果包具有特定于体系结构的依赖关系,则必须在目标映像上安装该依赖关系的所有适用体系结构。 例如,在 x64 目标映像上,同时包含指向 x86 和 x64 依赖关系包的路径,或将它们同时包含在解包应用文件的文件夹中。 如果还指定或包含 Arm 依赖项包,则 DISM 会将其忽略,因为它不适用于目标 x64 映像。

    计算机体系结构要安装的依赖关系:
    x64x64 和 x86
    x86x86
    Arm仅 Arm
  • 使用 /CustomDataPath 指定应用的可选自定义数据文件。 可以指定任何文件名。 将此文件添加到映像时,将重命名为 Custom.dat。

  • /LicensePath/PackagePath 选项一起使用,以指定包含应用程序许可证的 .xml 文件的位置。

  • /SkipLicense 只能用于在启用了旁加载的计算机上无需许可证的应用。 在其他方案中使用 /SkipLicense 可能会损坏映像。

示例:

Dism /Image:C:\test\offline /Add-ProvisionedAppxPackage /FolderPath:c:\Test\Apps\MyUnpackedApp /CustomDataPath:c:\Test\Apps\CustomData.xml
Dism /Online /Add-ProvisionedAppxPackage /PackagePath:C:\Test\Apps\MyPackedApp\MainPackage.appx /DependencyPackagePath:C:\Test\Apps\MyPackedApp\Framework-x86.appx /DependencyPackagePath:C:\Test\Apps\MyPackedApp\Framework-x64.appx /LicensePath:C:\Test\Apps\MyLicense.xml
Dism /Online /Add-ProvisionedAppxPackage /FolderPath:C:\Test\Apps\MyUnpackedApp /SkipLicense
Dism /Image:C:\test\offline /Add-ProvisionedAppxPackage /PackagePath:C:\Test\Apps\MyPackedApp\MainPackage.appxbundle /SkipLicense
Dism /Online /Add-ProvisionedAppxPackage /PackagePath:C:\Test\Apps\MyPackedApp\MainPackage.appxbundle /Region:"all"
Dism /Online /Add-ProvisionedAppxPackage /PackagePath:C:\Test\Apps\MyPackedApp\MainPackage.appxbundle /Region:"US;GB"

/Remove-ProvisionedAppxPackage

从映像中删除应用包( .appx 或 .appxbundle)的预配。 应用包将不会注册到所创建的新用户帐户。

语法:

/Remove-ProvisionedAppxPackage /PackageName:<PackageName>

重要

此选项仅在包预配已注册到任何用户配置文件时,才会删除该预配。 在 PowerShell 中使用 Remove-AppxPackage cmdlet 为已注册应用的每个用户删除应用,以便从映像中完全删除该应用。 如果尚未将应用注册到任何用户配置文件,则 /Remove-ProvisionedAppxPackage 选项将完全删除包。 若要从已安装桌面体验的 Windows Server 2012 或更高版本的映像中删除应用包,则必须先删除应用包,然后删除桌面体验。 桌面体验是 Windows Server 服务器核心安装 /Remove-ProvisionedAppxPackage 选项的一项要求。

示例:

Dism /Image:C:\test\offline /Remove-ProvisionedAppxPackage /PackageName:microsoft.devx.appx.app1_1.0.0.0_neutral_ac4zc6fex2zjp

/Optimize-ProvisionedAppxPackages

通过使用硬链接替换相同的文件,优化映像上预配包的总文件大小。 具有预配 AppX 包的映像处于联机状态后,/optimize-provisionedappxpackages 将无法优化预配 AppX 包。 如果将映像脱机并添加包,则只会优化在将映像恢复脱机状态后预配的包。

不支持对联机映像执行此命令。

DISM.exe /Image:C:\test\offline /Optimize-ProvisionedAppxPackages

/Set-ProvisionedAppxDataFile

将自定义数据文件添加到指定的应用包(.appx 或 .appxbundle)中。

语法

/Set-ProvisionedAppxDataFile [/CustomDataPath<custom_file_path>] /PackageName<PackageName>

使用此选项添加自定义数据文件之前,必须已将指定应用包(.appx 或 .appxbundle)添加到映像。 使用 /Add-ProvisionedAppxPackage 选项时,还可以添加自定义数据文件。

  • 使用 /CustomDataPath 指定应用的可选自定义数据文件。 可以指定任何文件名。 将此文件添加到映像时,将重命名为 Custom.dat。 如果 Custom.dat 文件已存在,则会将其覆盖。

  • 使用 /PackageName 指定应用包(.appx 或 .appxbundle)。

示例:

DISM.exe /Image:C:\test\offline /Set-ProvisionedAppxDataFile /CustomDataPath:c:\Test\Apps\Custom.dat /PackageName:microsoft.appx.app1_1.0.0.0_neutral_ac4zc6fex2zjp

/StubPackageOption

与应用包服务选项结合使用,以指定包的存根首选项。

语法:

/StubPackageOption:{installstub | installfull}
  • InstallStub 将预配包设置为存根版本。 将存根首选项隐式设置为存根。
  • InstallFull 将预配包设置为预配完整版。 将存根首选项隐式设置为完整。

如果未指定存根包选项,则预配包版本将设置为预定义的存根首选项。

示例:

Dism /image:C:\test\offline /add-provisionedappxpackage /packagepath:"C:\dism\stub\appwithresources.appxbundle" /stubpackageoption:installstub

了解 DISM 如何将 .appxbundle 资源包添加到映像

将 .appxbundle 添加到映像时,捆绑中的所有资源包并非都适用。 例如,如果将应用添加到默认语言为“西班牙语 (西班牙)”的 Windows 映像,则不应包含“法语 (法国)”资源。 若要确定添加到映像的资源,请通过以下方法确定包的适用性:

  • 语言资源包:如果某种操作系统语言不存在,则不会添加相应的应用语言资源包。 例如,你可能有一个 Windows 10 映像,默认语言为“英语 (美国)”,并包含“西班牙语 (西班牙)”语言包。 “英语 (美国)”和“西班牙语 (西班牙)”应用资源包将添加到映像。 如果应用捆绑中提供“法语 (法国)”资源包(或任何其他语言),则不会添加该资源包。

  • 缩放和 DirectX (DXFL) 资源包:缩放和 DirectX (DXFL) 资源包取决于 Windows 设备的硬件配置。 由于在运行 DISM 命令时无法知晓目标硬件的类型,因此所有缩放和 DXFL 资源包在预配时都将添加到映像。 有关使用缩放资源开发应用的详细信息,请参阅按比例缩放像素密度指南(Microsoft Store 应用)

对于包含多个语言包的映像,应用资源包将针对每种语言添加到映像中。 在第一位用户使用部署的映像登录到电脑并在 OOBE 期间选择了一种语言后,不符合该用户配置文件设置的不适用的资源包(语言资源包、缩放资源包和 DXFL 资源包)都将删除。

例如,应用可能支持“英语 (美国)”、“法语 (法国)”以及“西班牙语 (西班牙)”语言。 如果将应用添加到包含“英语 (美国)”和“西班牙语 (西班牙)”语言包的映像中,则只会向该映像添加“英语 (美国)”和“西班牙语 (西班牙)”资源包。 然后,如果用户首次登录并在 OOBE 期间选择“英语 (美国)”作为操作系统语言,则登录完成后,“西班牙语 (西班牙)”资源包将删除。

重要

在映像中添加或删除语言包会更改适用性环境,这可能导致映像中留下不正确或不完整的资源包集。 添加或删除语言包时,必须再次将所有 .appxbundle 包(包括任何依赖关系包和 Microsoft Store 许可证文件)添加到映像。 这将确保预配正确的资源包集。

限制

  • 不能在不支持 Windows 8 应用的操作系统上安装应用包 (.appx)。 不能在不支持 Windows 8.1 及更高版本应用的操作系统上安装应用捆绑包 (.appxbundle)。 WinPE 4.0、Windows Server 2012 服务器核心安装选项或任何低于 Windows 8 和 Windows Server 2012 的 Windows 版本上不支持应用。

    若要在 Windows Server 2012 上安装和运行应用,必须安装桌面体验

  • 仅基于 .appx 格式的应用包支持 /FolderPath 选项。

  • /PackagePath 必须始终用于 .appxbundle 包。

什么是 DISM?

DISM 映像管理命令行选项

部署映像服务和管理 (DISM) 命令行选项

使用 DISM 旁加载应用