1

我一直在浏览 Dism API 的windows 文档,目的是用 C++(或任何可以完成此任务的语言)编写一个可以在 Windows PE 中运行时创建 WIM 映像的 exe。我为 Dism API 找到了一个.NET Wrapper,看起来它可能对此有用,但我不确定 .NET 应用程序是否会在 Windows PE 中成功运行。总体而言,我的问题是我没有看到可以创建(并且不只是修改)wim 文件的函数。

如果我不关心将其封装在 .exe 文件中,Dism 文档确实显示了如何最初创建一个 wim——这让我很好奇为什么 api 中不存在类似的函数。请告知是否最简单的解决方案是让我的代码在代码中调用诸如 system() 之类的函数。

总而言之,我正在寻找一种在 Windows PE 中以编程方式(通过执行 exe 文件调用)创建 wim 文件的方法。

一如既往,感谢您的帮助和建议。

4

1 回答 1

1

我在一个与 WinPE 中的 DISM 一起工作的项目上工作了很多。我们使用此处所述的所有 .net 包配置 WinPE 。然后可以将 WinPE 配置为启动应用程序

我使用 c#,但您可以在 c++ 中执行托管应用程序,我相信您知道。我发现将 c# 代码放入 WinPE 相当容易,但这更多是我的经验的一个功能,我想。

我们用来与 DISM 交互的主要方式是使用System.Diagnostics.Process运行命令。该进程在单独的线程中运行,但 API 很简单,您可以等待(和/或超时)您的进程以进行同步。这仅使用 DISM 命令行界面,但如果您已将该包添加到 WinPE 映像,您也可以使用 powershell cmdlet。从您的应用程序到 DISM,它可能看起来像是一个 hacky 的“界面”,但它工作可靠,并且您可以防止进程窗口显示在屏幕上。这为运行大量 Windows 映像实用程序(例如 DISKPART、DISM 和 BCDEDIT)提供了一个不错的异步平台。

捕获新图像的主要方法是使用DISM /Capture-Image。听起来你已经发现了这个事实。许多选项超出了本 q/a 的范围,但我希望这能让您走上一条有用的道路。

于 2021-07-21T13:11:56.490 回答