使用 DISM 预安装应用

注意

对预安装 Microsoft Store 应用感兴趣,但不是 OEM? 有关为组织旁加载应用的信息,请参阅使用 DISM 旁加载应用

本主题介绍如何预安装应用,使它们成为 Windows 映像的一部分。

提示

硬件支持应用 (HSA) 是 Microsoft Store 应用,以下说明适用。

使用应用包

使用 DISM 将应用脱机预配到映像中。 可以从命令提示符或 Windows PowerShell 中的 DISM cmdlet 使用 DISM。

在之前版本的 Windows 10 中,预装的通用应用和 Microsoft Store 应用必须固定到“开始”菜单。 Windows 会删除已预装但未固定到“开始”菜单的应用。

从 Windows 10 版本 1803 开始,将 DISM /add-provisionedappxpackage/region 选项一起使用时,可以预安装应用,而无需将它固定到“开始”菜单。 预安装应用时,可以选择将应用排除在 LayoutModification.xml 之外,应用将成功安装而不会显示为“开始菜单”磁贴。 如果未指定区域列表,则只有在将应用固定到“开始”屏幕布局时,才会对其进行预配。

提取包文件

  1. 浏览到保存从“合作伙伴仪表板”下载的应用包的文件夹。

  2. 右键单击包含应用包文件的每个 .zip 文件夹。 单击“全部提取”,然后选择保存包文件文件夹的位置

    文件夹包含包的所有解包文件,包括主包、任何依赖项包和许可证文件。

重要

提取包文件后,请勿修改文件夹。 如果更改、添加或删除文件夹中的任何文件,应用将在安装或启动过程中失败。 即使浏览文件夹也可能会导致问题。

需要使用包文件中的许可证文件来测试预配的映像。 创建自己的自定义数据文件将无法准确测试 OEM 预安装的应用。

若要将应用脱机预配到映像中,可以使用 Windows PowerShell 中的 Dism.exe 工具或 DISM cmdlet 从解压缩文件的文件夹添加应用。

使用 DISM 预安装 Microsoft Store 签名应用

  1. 以管理员身份打开命令提示符。

  2. 装载要为其提供服务的 Windows 映像:

    Dism /Mount-Image /ImageFile:c:\images\myimage.wim /Index:1 /mountdir:c:\test\offline
    
  3. 将应用添加到装载的映像。 使用 /PackagePath/DependencyPackagePath 选项。

    • Packagepath 是 .appx 程序包或包文件的路径
    • DependencyPackagePath 是用于指定每个依赖项包的路径。 每个命令可以有多个依赖项。
    • Windows 10 版本 1803 的新增功能:添加应用时,请使用 Region 选项Region 允许添加应用,而无需将应用固定到“开始”菜单。
    Dism /Image:c:\test\offline /Add-ProvisionedAppxPackage /PackagePath:c:\downloads\package.appxbundle /DependencyPackagePath:c:\downloads\dependency1.appx /DependencyPackagePath:c:\downloads\dependency2.appx /LicensePath=c:\downloads\package_License1.xml /region=all"
    

    有关使用应用包(包括新的 /region 选项)的信息,请参阅 DISM 应用包服务命令行选项

  4. 将应用固定到“开始”菜单。

  5. 保存更改并卸载映像。 在命令提示符处,键入:

    Dism /Unmount-Image /mountdir:c:\test\offline /commit
    

注意

Microsoft Store 应用不会在审核模式下运行。 若要测试部署,请运行 Windows 并创建新的用户配置文件。 有关审核模式的详细信息,请参阅审核模式概述

重要说明:如果预安装的是移动宽带设备应用,则必须先在电脑中插入 SIM 卡,才能运行 Sysprep 的 specialize 阶段。 有关预安装移动宽带设备应用的详细信息,请参阅预安装移动宽带应用程序体验所需的组件

更新或删除包

通过使用 DISM.exe 工具或 Windows PowerShell 中的 DISM cmdlet,可以从 Windows 映像中删除预安装的应用(包括许可证和自定义数据文件)。 安装新版本之前,应删除旧版本的应用。

使用 DISM 删除预安装的应用

  1. 使用管理员权限打开随 Windows ADK 一起安装的部署工具命令提示符。 在“开始”屏幕上,键入“部署和映像工具环境”,右键单击图标,然后选择“以管理员身份运行”

  2. 装载用于服务的脱机映像。 在命令提示符处,键入:

    Dism /Mount-Image /ImageFile:c:\images\myimage.wim /Index:1 /mountdir:c:\test\offline
    
  3. 查找要删除的应用的完整包名称。 在命令提示符处,键入:

    Dism /Image:C:\test\offline /Get-ProvisionedAppxPackages
    
  4. 从装载的映像中删除该应用。 例如,在命令提示符处键入:

    Dism /Image:c:\test\offline /Remove-ProvisionedAppxPackage /PackageName:microsoft.devx.appx.app1_1.0.0.0_neutral_en-us_ac4zc6fex2zjp
    
  5. 如果要更新应用,可以预安装 Microsoft Store 签名应用的更新版本。 在命令提示符中处,键入:

    Dism /Image:c:\test\offline /Add-ProvisionedAppxPackage/FolderPath:c:\downloads\appxpackage
    
  6. 保存更改并卸载映像。 在命令提示符处,键入:

    Dism /Unmount-Image /mountdir:c:\test\offline /commit
    

使用自定义数据文件

在电脑上预安装的应用都可以访问特定于安装的自定义数据。 此自定义数据在预安装过程中添加到应用中,并在运行时可用。 自定义数据使开发人员可以自定义应用的特性和功能,包括提供报告功能。

将自定义数据文件添加到 Windows 映像

使用 DISM 工具并通过 Windows PowerShell 使用 Add-AppxProvisionedPackage 来预安装应用时,必须指定自定义数据文件。 以下命令演示如何使用 DISM 工具执行此操作:

Dism /Image:C:\test\offline /Add-ProvisionedAppxPackage / FolderPath:f:\Apps\Fabrikam_KnowMyPC /CustomDataPath:f:\Contoso_Promotion.xml

如果应用的数据存储中已存在自定义数据文件(例如,如果已将包添加到映像),则该文件将覆盖现有文件。 如果安装失败,系统不会还原该文件。

注意:可以通过 Microsoft Store 发布对应用的更新,而不会丢失自定义数据文件。 但是,如果用户删除了应用,则自定义数据文件将不再可用,即使用户重新安装应用也是如此。

测试预安装应用的自定义数据

在电脑上预安装的应用都可以访问特定于安装的自定义数据。 此自定义数据在预安装过程中添加到应用中,并在运行时可供应用使用。 自定义数据使开发人员可以自定义应用的特性和功能,包括提供报告功能。

Custom.data 文件显示在应用的安装位置。 名称 Custom.data 是硬编码的,无法修改。 应用可以检查是否存在此文件,以确定电脑上是否预安装了该应用。 下面是有关如何访问 Custom.data 文件的示例。

var outputDiv = document.getElementById("CustomData");
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync
     ("microsoft.system.package.metadata\\Custom.data").then(function (file) {
         // Read the file
         Windows.Storage.FileIO.readTextAsync(file).done(function (fileContent) {
            outputDiv.innerHTML = 
                 "App is preinstalled. CustomData contains:<br /><br />"
                 + fileContent;
         },
         function (error) {
             outputDiv.innerText = "Error reading CustomData " + error;
         });
     },
     function (error) {
         outputDiv.innerText = "CustomData was not available. App not preinstalled";
     });

Custom.data 文件可以包含任何内容,并且可以是应用所需的任何格式。 预安装过程只是让它可供应用使用。 开发人员可以向预安装合作伙伴提供数据文件,或者你可以同意合作伙伴生成内容的格式。

测试自定义数据

在 Microsoft Visual Studio 中构建和调试应用时,无法从应用的安装位置访问 Custom.data 文件,因为尚未预安装应用。 可以通过在应用中放置一个测试 Custom.data 文件,然后加载并测试应用本地文件来模拟使用 Custom.data 文件。 为此,请修改以下代码示例:

("microsoft.system.package.metadata\\Custom.data").then(function (file) {

更改为:

("Custom.data").then(function (file) {

验证文件格式和内容后,可以将 Custom.data 的位置更改为最终位置,如以上原始示例所示。

测试 Custom.data 文件

  1. 使用管理员权限打开随 Windows ADK 一起安装的部署工具命令提示符。 在“开始”屏幕上,键入“部署和映像工具环境”,右键单击图标,然后选择“以管理员身份运行”

  2. 使用自定义数据文件添加应用程序:

    dism /online /Add-ProvisionedAppxPackage /PackagePath:.\CustomData_1.0.0.1_AnyCPU_Debug.appx /CustomDataPath:.\Test.txt /SkipLicense
    

    其中 /PackagePath:.\CustomData_1.0.0.1_AnyCPU_Debug.appx 指向本地应用测试包,并且 /CustomDataPath:.\Test.txt 指向 Custom.data 文件。 请注意,在应用中安装数据后,不会使用此处提供的文件名。

    现在,应用在电脑(用于测试该应用)的“开始”屏幕上会显示一个磁贴。 应用应能够访问 Custom.data 文件。 如果需要进行其他调试,请在从“开始”屏幕启动应用后附加调试器

    注意:可能需要注销并再次登录才能在“开始”屏幕上看到应用

  3. 测试完应用后,必须删除预安装包才能继续使用开发环境。 若要使用 Windows PowerShell 删除预安装包,可以使用 Get-AppxPackage cmdlet,通过管道向 Remove-ProvisionedAppxPackage 提供完整的应用包名称

    Get-AppxPackage *CustomData* | Remove-ProvisionedAppxPackage

    其中 *CustomData* 是应用名称的已知部分

预安装 Microsoft Store 设备应用或移动宽带应用

可以使用部署映像服务和管理 (DISM) 平台预安装 Microsoft Store 设备应用或移动宽带应用所需的组件。

注意:本文适用于 OEM,这些 OEM 的设备支持 Microsoft Store 设备应用或移动宽带应用

对于每种类型的应用,应预先安装两项内容,才能提供正确的 Microsoft Store 设备应用或移动宽带应用:

  • 对于 Microsoft Store 设备应用,请预安装:
    1. 设备元数据包
    2. 应用
  • 对于 Microsoft Store 移动宽带应用,请预安装:
    1. 服务元数据包
    2. 应用

重要说明:虽然在 OOBE 过程完成后会立即分析元数据包和相应的应用,但用户也许能够在分析元数据包之前启动应用。 在这种情况下,用户将看到“拒绝访问”错误。 为避免这种情况,请同时将元数据包和应用应用到系统映像。

预安装设备元数据或服务元数据包

预安装设备元数据或服务元数据包

  1. 要预安装 Microsoft Store 设备应用,应已获得设备元数据包。 要预安装移动宽带应用,应已获得服务元数据包。

    注意:设备元数据包和服务元数据包使用相同的文件扩展名 (.devicemetadata-ms)

  2. 将设备元数据或服务元数据包(devicemetadata-ms 文件)复制到 %ProgramData%\Microsoft\Windows\DeviceMetadataStore 文件夹中的系统映像。 可通过以下方式之一执行此操作:

    • 在运行 Sysprep 之前联机

    • 使用 DISM 运行 Sysprep 后脱机。 要执行此操作:

      1. 装载用于服务的脱机映像。

        Dism /Mount-Image /ImageFile:C:\test\images\myimage.wim /index:1 /MountDir:C:\test\offline
        
      2. 将元数据包文件复制到已装载映像的设备元数据存储。 例如,若要将 0ECF2029-2C6A-41AE-9E0A-63FFC9EAD877.devicemetadata-ms 元数据包文件复制到设备元数据存储 ProgramData\Microsoft\Windows\DeviceMetadataStore

        copy 0ECF2029-2C6A-41AE-9E0A-63FFC9EAD877.devicemetadata-ms C:\test\offline\ProgramData\Microsoft\Windows\DeviceMetadataStore
        
      3. 保存更改并卸载映像。

        dism /Unmount-Image /mountdir: c:\test\offline /commit
        

      有关脱机映像服务的详细信息,请参阅 DISM 概述

有关服务元数据的详细信息,请参阅 服务元数据

预安装 Microsoft Store 设备应用或移动宽带应用

预安装 Microsoft Store 设备应用或移动宽带应用

  1. 装载用于服务的脱机映像。

    Dism /Mount-Image /ImageFile:C:\test\images\myimage.wim /index:1 /MountDir:C:\test\offline
    
  2. 将 Microsoft Store 设备应用或移动宽带应用添加到映像。

    dism /Image:<mounted folder> /Add-ProvisionedAppxPackage /FolderPath:<appxpackage path>
    
  3. 保存更改并卸载映像。

    dism /Unmount-Image /mountdir: c:\test\offline /commit