排查 MSIX 容器中的运行时问题

在本文中,我们将回顾如何解决 MSIX 容器中发生的运行时问题。 MSIX 容器本身相对简单明了。 随着越来越多的应用程序在修改包的帮助下在同一程序包标识符内运行,虚拟注册表和虚拟文件系统将按照应用程序的安装顺序进行覆盖。

在某些情况下,安装这些应用程序的顺序可能会导致不可预见的问题,即可能会覆盖预期的注册表项,并可能替换预期的文件。

为了帮助诊断此类问题,Invoke-CommandInDesktopPackage 是一个 PowerShell cmdlet,可用于在 MSIX 容器内运行应用程序。 这样,用户就可以在 MSIX 容器内运行命令提示符、注册表编辑器和 PowerShell,并获取合并文件系统和合并注册表配置单元的视图。

重要

对于 18922 之前的 Windows 10 版本,Invoke-CommandInDesktopPackage 要求设备处于开发人员模式。

查看合并的文件系统

要查看容器内运行的应用程序观察到的文件系统,请使用以下 PowerShell 命令:

Invoke-CommandInDesktopPackage -AppId "AppPackage1" -PackageFamilyName "Contoso.AppPackage1_8h66172c634n0" -Command "cmd.exe" -PreventBreakaway

上面的命令将在 Contoso.AppPackage1_8h66172c634n0 包容器中启动 cmd.exe 的实例。 从容器内运行命令提示符时,可以浏览文件系统并查看合并的文件。

查看合并的注册表配置单元

要查看容器内运行的应用程序观察到的完整设备注册表配置单元,请使用以下 PowerShell 命令:

Invoke-CommandInDesktopPackage -AppId "AppPackage1" -PackageFamilyName "Contoso.AppPackage1_8h66172c634n0" -Command "regedit.exe" -PreventBreakaway

上面的命令将在 Contoso.AppPackage1_8h66172c634n0 包容器的上下文内启动注册表编辑器。 在此处,可以浏览本地计算机和当前用户注册表项,并确定导致问题的可能原因。

提示

如果要在同一容器中启动后续流程,则在利用 Invoke-CommandInDesktopPackage 时使用 '-PreventBreakaway' 标志。 否则,任何后续启动都将中断容器。

注意

并非所有应用程序都可以在容器内启动。 例如,explorer.exe 将中断容器。