删除或更新包含内置 Windows 映像的 Microsoft应用商店应用后,Sysprep 会失败
本文讨论在使用 Microsoft Store 删除或更新预配的 Microsoft Store 应用,然后在计算机上运行 sysprep 时出现的问题。
适用于: Windows 10 - 所有版本、Windows 11
原始 KB 数: 2769827
简介
Sysprep 是一种面向 IT 管理员的工具,他们希望为复制、审核和客户交付准备 Windows 安装。 本文中的指南适用于支持代理和 IT 专业人员。 如果你是使用 Microsoft 应用商店应用时遇到问题的家庭用户,请参阅 “修复Microsoft应用商店中的应用问题”。
Windows 映像中内置了多个Microsoft应用商店应用。 这些应用包括邮件、地图、消息、必应、旅行和新闻应用等。 这些应用称为 预配 的应用。 预配的应用在映像中暂存,并计划在首次登录时为 Windows 映像的每个用户安装。 除了内置应用,还可以将自己的业务线Microsoft应用商店应用旁加载到 Windows 映像中,而无需将它们发布到 Microsoft 应用商店。 可以使用DISM.exe或通过 DISM PowerShell 模块提供的联机或脱机服务命令旁加载 Appx
包。
现象
请考虑下列情形:
方案 1
- 你要创建自定义 Windows 10 或 Windows 11 引用计算机,该计算机需要 sysprep 和捕获。
- 想要从此引用计算机中删除某些预配Microsoft应用商店应用(
Appx
包)。 dism -online /Remove-ProvisionedAppxPackage /PackageName:<packagename>
运行以取消预配Appx
包。
在此方案中运行 sysprep 操作时,该操作可能会失败并出现以下错误:
系统准备工具 3.14
尝试对计算机进行 sysprep 时发生致命错误
方案 2
- 你已有一个 Windows 映像,并且映像中会旁加载多个Microsoft应用商店应用。
- 你想要从映像中删除一些旁加载
Appx
的包,并对其进行进一步自定义。 - 启动到引用计算机并运行以下 PowerShell 命令之一以删除包的
Appx
预配:Remove-AppxProvisionedPackage -PackageName <packagename>
Remove-ProvisionedAppxPackage -PackageName <packagename>
在此方案中运行 sysprep 操作时,该操作可能会失败并出现以下错误:
系统准备工具 3.14
尝试对计算机进行 sysprep 时发生致命错误
方案 3
- 你正在创建 Windows 10 或 Windows 11 引用映像。
- 连接到 Microsoft 应用商店,然后使用 Microsoft 应用商店更新内置Microsoft应用商店应用。
在此方案中运行 sysprep 操作时,该操作可能会失败并出现以下错误:
系统准备工具 3.14 尝试 sysprep 计算机时发生致命错误
此外,在SetupErr.log中,你可能会注意到以下错误条目:
<日期><时间>,为用户安装错误 SYSPRP 包 <PackageFullName> ,但未为所有用户预配。 此包在 sysprep 映像中无法正常工作。
<日期><时间>,错误 SYSPRP 无法删除当前用户的应用:0x80073cf2。
<Date><Time>, Error SYSPRP Exit code of RemoveAllApps thread was 0x3cf2.
<日期><时间>,错误 [0x0f0082] SYSPRP ActionPlatform::LaunchModule: 从 C:\Windows\System32\AppxSysprep.dll; dwRet = 0x3cf2
<Date><Time>, Error SYSPRP ActionPlatform::ExecuteAction: Error in execute action; dwRet = 0x3cf2
<日期><时间>,错误 SYSPRP ActionPlatform::ExecuteActionList: 执行操作中的错误;dwRet = 0x3cf2
<日期><时间>,错误 SYSPRP SysprepSession::Execute: Error in execute actions from C:\Windows\System32\Sysprep\ActionFiles\Generalize.xml; dwRet = 0x3cf2
<>执行><SysprepSession 操作时出现错误 SYSPRP RunPlatformActions:Failed;dwRet = 0x3cf2
<日期><时间>,错误 [0x0f0070] SYSPRP RunExternalDlls:运行注册表 sysprep DLL 时出错,停止 sysprep 执行。 dwRet = 0x3cf2
<Date><Time>, Error [0x0f00a8] SYSPRP WinMain:Hit failure while processing sysprep generalize internal providers; hr = 0x80073cf2
原因
Sysprep 在 Windows 中添加了一个附加提供程序,用于清理 Appx
包并通用化映像。 仅当包是每用户包或所有用户预配包时 Appx
,提供程序才有效。
- 每用户包意味着该
Appx
包是针对特定用户帐户安装的,不适用于计算机的其他用户。 - 所有用户包 意味着
Appx
已预配到映像中,以便使用此映像的所有用户都可以访问应用。
如果在映像中预配的所有用户包已从映像中手动取消预配,但未为特定用户删除,提供程序将在 sysprep 期间清除此包时遇到错误。 如果预配到映像中的所有用户包已由此引用计算机上的某个用户更新,提供程序也会失败。
解决方法
若要解决此问题,请删除运行 sysprep 的用户的包,并删除预配。 要设置部门,请按照以下步骤操作。
注意
若要防止Microsoft应用商店更新应用,请在创建映像之前拔出 Internet 连接或禁用审核模式下的自动更新。
运行以下 PowerShell cmdlet:
Import-Module Appx Import-Module Dism Get-AppxPackage -AllUsers | Where PublisherId -eq 8wekyb3d8bbwe | Format-List -Property PackageFullName,PackageUserInformation
注意
- 在此最后一个 cmdlet 的输出中,检查包显示为“已安装”的用户。 从引用计算机中删除这些用户帐户,或使用这些用户帐户登录到计算机。 然后,运行步骤 2 中的 cmdlet 以删除
Appx
包。 - 此命令列出Microsoft发布并由该引用计算机的任何用户安装的所有包。 由于计算机要进行 sysprepped,因此我们假定这些用户配置文件不再需要包。
- 如果已手动预配属于其他发布者的应用,请运行以下命令列出它们:
Get-AppxPackage -AllUsers | Format-List -Property PackageFullName,PackageUserInformation
通过运行以下 cmdlet 删除
Appx
包:Remove-AppxPackage -Package <packagefullname>
通过运行以下 cmdlet 删除预配:
Remove-AppxProvisionedPackage -Online -PackageName <packagefullname>
如果尝试从更新问题恢复,可以在执行以下步骤后重新预配应用。
注意
如果你正在为脱机映像提供服务,则不会出现此问题。 在这种情况下,将自动为所有用户清除预配。 这包括运行命令的用户。
详细信息
有关如何添加和删除应用的详细信息,请参阅:
数据收集
如果需要 Microsoft 支持方面的帮助,建议按照使用 TSS 针对与部署相关的问题收集信息中所述的步骤收集信息。