.net Windows PE环境下用DISM API编程实现图像采集

xzlaal3s  于 2022-12-27  发布在  .NET
关注(0)|答案(2)|浏览(126)

我一直在研究API的windows documentation,目标是用C++编写一个exe(或任何可以实现此功能的语言),它可以在Windows PE中运行时创建WIM映像。我找到了一个用于Dism API的.NET Wrapper,它似乎可以用于此目的,但我不确定.NET应用程序是否可以在Windows PE中成功运行。总体而言,我的问题是,我没有看到一个函数可以创建--而不是简单地修改--一个wim文件。
如果我不关心把它封装在一个.exe文件中,Dism documentation确实展示了如何初始化创建一个wim--这让我很好奇为什么API中没有类似的函数,请告诉我最简单的解决方案是让我的代码在代码中调用一个像system()这样的函数。
总之,我正在寻找一种从Windows PE中以编程方式(通过执行exe文件调用)创建wim文件的方法。
一如既往,谢谢你的帮助和建议。

u5i3ibmn

u5i3ibmn1#

我在一个项目中工作,在WinPE中使用DISM相当多。我们将WinPE与所有.net包配置为described here。然后WinPE可以配置为start an application
我使用c#,但你可以用c++来做托管应用程序,我相信你知道。我发现把c#代码放到WinPE中要容易得多,但我想这更多的是我的经验。
我们与DISM交互的主要方式是使用System.Diagnostics.Process运行命令。该进程在单独的线程中运行,但API很简单,您可以等待(和/或超时)您的进程进行同步。这只使用DISM命令行界面,不过,如果您已将该软件包添加到WinPE映像中,则也可以使用Powershell cmdlet。从应用程序到DISM的“接口”可能看起来有些笨拙,但它工作可靠,您可以保持进程窗口不显示在屏幕上。这使得一个体面的异步平台运行一堆Windows映像实用程序,如DISKPART,DISM和BCDEDIT。
捕获新图像的主要方法是使用DISM /Capture-Image。听起来你已经发现了这个事实。有很多选项在某种程度上超出了这个问答的范围,但我希望这能让你走上一条有用的道路。

4nkexdtk

4nkexdtk2#

尽管这篇文章有点老,但这里有一个可能仍然与你相关的资源。也许这篇文章会有所帮助。
我编写了一个基于GUI的小工具,项目名为WIM-Backup,它使用Windows映像格式(WIM)在WinPE中创建计算机系统(操作系统映像)的完整备份,然后恢复它们。
该应用程序托管在GitHub上,是开源的,并在Apache 2.0许可证下提供。
此外,该存储库还包含一个逐步说明的指南,以帮助您安装和运行该存储库。

    • 简要摘要:**
  • WIM-Backup始终需要外部可引导介质,如USB闪存驱动器。
  • 从该驱动器启动WinPE,以执行备份或恢复到外部介质(例如USB硬盘驱动器)或从外部介质恢复。
  • 在可引导USB闪存驱动器上,必须先设置WinPE(自述文件中有说明)。
  • 完成相应操作后,将显示操作成功还是失败的状态消息。
  • 恢复备份后,您可以从目标驱动器正常引导。
  • 备份和恢复过程都相对简单(不是"火箭科学")。
  • 要设置解决方案,由于需要下载(例如ADK),最好需要30分钟左右的时间
  • 最后但并非最不重要:它具有许可证(非专有),且是开放源代码。

相关问题