Windows PE WinForm 应用程序未执行

Posted

技术标签:

【中文标题】Windows PE WinForm 应用程序未执行【英文标题】:Windows PE WinForm app not exectued 【发布时间】:2018-07-04 14:17:40 【问题描述】:

我正在制作一个集成 MS .NET Framework 的 Windows PE 操作系统的 Windows 映像 (.wim),以便运行 WinForm 应用程序作为计算机安装向导。

我的问题与this post 完全相同,从命令行执行应用程序时,它没有显示任何界面,也没有显示任何错误消息。我还检查了正在运行的进程,我的应用程序没有一个。

在创建映像时,如MS site 所述,我首先导入了 WinPE-WMI 要求,然后是 .NET Framework 包 WinPE-NetFX。接下来,我使用构建的映像创建了可启动的 USB 记忆棒。最后,我将应用程序复制到存储在 USB 上的附加目录中。

然后我只需从命令行执行应用程序。

你们有什么想法吗?

提前致谢并致以最诚挚的问候。

杰里米

【问题讨论】:

Microsoft 明确表示 WinPE 仅支持非常有限的一组 API,docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/…,而我认为 Windows 窗体需要的远不止这些。 感谢您的回答,是否意味着 WinPE 不支持 WinForm 或者您认为有专用 API 可用?假设不支持 WinForm 并且没有可用的软件包,除了 HTA 和 VBS,您还可以推荐什么语言,以便在 WinPE 中运行 GUI 应用程序? 【参考方案1】:

尝试添加 HTA 和脚本包,它确实会增加 boot.wim 的大小,但某些库需要依赖项。还要检查您是否也添加了相应的语言包。我第一次在 WinPE 中创建 .Net 应用程序时使用的策略是添加所有包并在 Virtual Box 中对其进行测试,然后慢慢删除我不需要查看它是否有效的包。我制作了一个批处理脚本来添加所有包并 REM 删除我不需要的包。如果需要,这是脚本

Dism /Mount-Image /ImageFile:"Z:\Tools\winpe_x86\media\sources\boot.wim" /index:1 /MountDir:"Z:\Tools\winpe_x86\mount"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-HTA.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-HTA_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-WMI.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-WMI_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-MDAC.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-MDAC_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-GamingPeripherals.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-Dot3Svc.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-Dot3Svc_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-PPPoE.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-PPPoE_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-RNDIS.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-RNDIS_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-WDS-Tools.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-WDS-Tools_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-Scripting.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-Scripting_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-NetFx.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-NetFx_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-PowerShell.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-PowerShell_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-DismCmdlets.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-DismCmdlets_en-us.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-SecureBootCmdlets.cab"

Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows 预安装环境\x86\ WinPE_OCs\WinPE-StorageWMI.cab" Dism /Add-Package /Image:"Z:\Tools\winpe_x86\mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\en -us\WinPE-StorageWMI_en-us.cab" Dism /Unmount-Image /MountDir:"Z:\Tools\winpe_x86\mount" /commit

要在虚拟机中测试使用 VMI 作为驱动器,Windows 7 及更高版本可以使用 Diskpart 或磁盘管理挂载 VMI 文件。

【讨论】:

【参考方案2】:

我用 .net 和一个 winform 应用程序构建了一个 winpe...并按顺序安装了以下 .cabs:

winpe 脚本 winpe-wmi winpe-netfx winpe-securestartup winpe 增强存储 winpe-dot3svc

我相信 .net 的唯一要求是 winpe-netfx...但几乎每个从事 winpe 工作的人也需要 wmi 和脚本...只是根据 winpe 的本质。其余的 .cab 非常符合我的需要。

话虽如此,有很多东西在 winpe 表单中工作。例如,“标准”对话框(文件打开等)不起作用。这有点命中注定。您的主表单可能要求提供 winpe 中不可用的功能。

所以,从基础开始并构建...一个表单 /w 单个按钮...部署它...然后添加东西直到它中断。不要指望在 winpe 中构建复杂的 UI ......它不会让你。标签、按钮、文本框、列表框……仅此而已。

另外 - 请注意,有针对 x86 和 amd64 的部署(您可能需要 amd64)...并且您必须将 .cabs 与您开始使用的映像相匹配...并将您的 .net 程序编译为任何 .cpu 或特定于您选择的运行时。如果您选择任何 cpu,请在构建选项卡上关闭“首选 32 位”。

winpe 映像的构建过程繁琐且容易出错。确保您在运行映像中获取所有依赖项。

【讨论】:

以上是关于Windows PE WinForm 应用程序未执行的主要内容,如果未能解决你的问题,请参考以下文章

程序员自我修养阅读笔记——Windows PE/COFF

请问啥是WINDOWS下的PE病毒 ?

U盘PE安装win10,显示windows无法完成安装。若要在此计算机上安装windows,请重新启动安装。

安装winform程序时自动安装windows服务

Windows PE权威指南的内容简介

电脑pe是啥意思