在工厂 OS 中使用诊断 Win32 应用

使用工厂 OS win32_manufacturing 和 win32_development 产品配置,可以在运行制造、预配和硬件验证流程期间,在容器中运行现有的 Win32 制造和诊断应用。 这些工厂 OS 产品配置使用 Hyper-V 来提供容器支持,并使用 RDP 在主机与来宾操作系统之间进行通信。

为包含 win32 支持的工厂 OS 映像创建工作区

若要开始创建包含 win32 支持的工厂 OS 映像,必须创建一个新工作区:

  1. 以管理员身份打开 Windows 系统工具包环境。

  2. 运行 PrepWSKWorkspace,并指定 FactoryOS 产品以及 win32_manufacturingwin32_development 产品配置:

    PrepWSKWorkspace C:\FactoryOSWin32Manufacturing -Product FactoryOS -ProductConfiguration win32_manufacturing
    

    新工作区中的 OEMInput.xml 包含用于在映像中包含容器的功能。

  3. 自定义映像。 按照 [创建工厂 OS 映像](build-a-Factory OS-image.md#5-add-drivers) 中从步骤 5 开始的说明完成映像自定义。 参阅下面的将资料添加到容器,了解如何使用测试内容文件夹向容器添加资料。

与工厂 OS 中的容器交互

可以通过 shell 启动和控制台启动来控制工厂 OS 容器并与之交互。

Shell 启动

启动进入工厂 OS shell 后,可使用以下方式来与容器交互:

  • 使用 Factory Orchestrator 任务列表,包括特殊的 Factory Orchestrator XML 文件
  • 在设备上使用 Factory Orchestrator 应用或 API 远程或本地交互
  • 通过远程桌面应用在本地交互,这会在容器中启动命令提示符

控制台启动

在控制台启动模式下启动进入工厂 OS 后,可使用以下方式来与容器交互:

  • 使用 Factory Orchestrator 任务列表,包括特殊的 Factory Orchestrator XMl 文件
  • 在设备上使用 Factory Orchestrator API 远程或本地交互
  • 使用 Factory Orchestrator 应用远程交互

将资料添加到容器

使用此产品配置生成工厂 OS 映像时,可以在映像生成和运行时期间部署和运行诊断 Win32 应用:

  • 在创建映像期间添加容器应用:在测试内容文件夹中包含一个名为 Container 的文件夹
    • Container 文件夹中的内容将在工厂 OS 和位于 C:\TestContent\Container 的容器中可用
    • 在重启后,只会保留容器中 Container 文件夹的内容。 重启设备时,在容器中所做的所有其他文件更改和注册表更改都将被删除
  • 在运行时添加应用:如果你正在运行一台设备并需要将某个应用添加到容器,可以

运行 GUI win32 应用

如果你有一个需要 GUI 的 win32 应用,请使用工厂 OS 中包含的远程桌面 UWP 应用。 以下说明假设你有一台正在运行的工厂 OS 设备,其中包含一个加载了 GUI 应用的容器:

  1. 在 Factory Orchestrator 中,转到“命令提示符”选项卡。
  2. 选中“在容器中运行”。
  3. 单击出现的“显示容器 UI”按钮。
  4. 现在你已连接到设备上的容器,应会在该容器的左下角看到最小化的命令提示符。 可以最大化此命令提示符并使用它来启动应用。

返回到工厂 OS

可通过以下方式返回到工厂 OS:

  1. 单击位于远程桌面应用窗口的中上方位置的“...”
  2. 持续按 Alt + Tab,直到看到 Factory Orchestrator 或你要切换到的其他应用。

如果不小心关闭了命令提示符窗口

  1. 返回到工厂 OS:

    1. 单击位于远程桌面应用窗口的中上方位置的“...”
    2. 持续按 Alt+Tab,直到看到 Factory Orchestrator
  2. 在 Factory Orchestrator 中,转到“命令提示符”选项卡

  3. 选中“在容器中运行”

  4. 在“命令”文本框中运行以下命令:

    RunAsRdUser "c:\windows\system32\cmd.exe` `/C start cmd.exe`
    
  5. 单击“运行”图标

  6. 单击“显示容器 UI”按钮,命令提示符现在将再次可见

在容器中运行 win32 应用作为 Factory Orchestrator 任务列表的一部分

在 Factory Orchestrator 中创建任务时,可以通过选中“在容器中运行?”复选框,将该任务配置为在容器中运行:

Factory Orchestrator new executable task window showing the Run in container checkbox

为此,还可以创建 FactoryOrchestratorXML 文件并将 RunInContainer="true" 属性添加到要在容器中运行的任务。

  • 运行任务列表时,Factory Orchestrator 会自动检测容器中运行的任务是否需要 GUI。
  • 如果该任务需要 GUI,则会自动与容器建立远程桌面连接。 建立连接后,该任务将自动启动。 当程序关闭时,远程桌面连接将终止,任务列表中的下一个任务将自动启动。

支持范围

应用类别

并非所有应用类别都在容器支持范围内。下面是工厂 OS 容器中应用兼容性的支持范围内和支持范围外的类别的宽泛列表:

  • 范围内:
    • 未打包的 Win32 控制台应用
    • UI 受限的未打包 Win32 应用
    • 打包的 Win32 控制台应用
    • UI 受限的打包 Win32 应用
  • 超出范围:
    • 需要高规格硬件的应用类别,例如专业视频编辑
    • 需要在主机与来宾操作系统之间支持 COM(组件对象模型)的应用

不支持的方案

某些方案不受支持:

区域 方案
媒体传输协议 (MTP)
  • 连接到设备
  • 配对手机等设备
    USB 打印 打印机支持
    虚拟化 安装自身的虚拟机监控程序的应用
    安装自身的驱动程序的应用 由于需要跨容器边界交互,安装并启动驱动程序的 Win32 应用可能会出现意外行为
    屏幕捕获 尝试创建主机操作系统屏幕截图的应用
    需要 shell 集成的应用 需要任务栏交互或其他 shell 交互的应用