豆豆 一个不起眼的经验分享博客。

Windows多合一镜像制作相关命令及注意事项总结

2013/12/29 23:49
74,235
41

最后修改于 2016年03月29日 21:09

前几天有网友留言询问Win7旗舰版32位+64位多合一镜像的制作方法,今天就把相关内容整理一下发出来吧。其实基于原版的多合一镜像制作过程是非常简单的,不过因为涉及到几个命令行工具的用法,可能一些朋友会感觉比较难上手或者只限于教程中的内容而不懂得怎么去灵活运用这些命令。

什么是命令行工具?

所谓命令行工具,它们不像普通的应用软件那样可以在图形界面(窗口)上通过简单的点击按钮等操作来执行任务,而是需要在命令提示符(CMD)或者PowerShell中通过手动输入一条条命令的方式来执行某些特殊任务的一类工具。比如,DiskPart(分区管理工具)、DISM(映像管理工具,本文的主角)等等。

网上可以找到基于这些命令行工具或者基于微软开放的相关API制作出来的具有图形界面的替代软件。不过,我个人还是倾向于使用命令来操作,所以就借这个机会把相关基础知识总结一下吧,同时方便自己查询。如果你对这些内容非常感兴趣,希望这篇文章能成为你掌握相关内容的非常棒的入门文章,嗯,仅仅是入门,更多的内容还请参考微软官方文档并多多尝试。至于开头那位朋友的问题,就作为一个例子放到最后面吧。

多合一镜像制作原理:

多合一镜像制作基本上所有的操作都围绕在wim文件(映像文件)的处理上。关于wim文件,建议阅读《认识wim格式文件,学习使用Dism工具捕获系统映像的相关命令》。我们知道wim文件中包含了操作系统的所有文件。一个wim文件可以包含多个版本系统文件,并且能做到相同的文件只存储一次。而多合一镜像其实就是把各版本的系统文件都存储到一个wim文件而已。

下载命令行工具:

1、 DISM

关于DISM,之前也有过初步介绍,这是可以用来处理wim文件的工具。之前,我们用imageX工具来处理映像文件,而新版(Win8/8.1自带)DISM工具已经包含了imageX的大部分功能,与映像相关的操作我们尽量都用DISM来完成。

2、 imagex

用于修改wim中包含的映像名称(列表中的名称)和映像描述(选中版本后列表下方的提示文字)。没有在官方文档中找到用DISM修改映像名称和描述的命令,如果确实有这个命令,希望知道的人告知一下~~

3、 Oscdimg

这是用来将散装文件打包成ISO镜像文件的工具。

以上工具均可以从微软发布的ADK for win8.1中提取,请下载ADK在线安装程序(点此下载)。下载后选择在线安装,只选择安装“部署工具”。安装后可以在Program Files目录中找到这些工具。比如,64位系统在如下目录:
C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools

使用命令行工具需注意的几点:

1、 权限

系统附带的命令行工具多数需要以管理员身份运行,因此需要以管理员身份运行CMD(或PowerShell),根据权限继承原理,在其中运行的命令行工具也就都具有了管理员权限。

2、 路径

要正常使用命令行工具需要保证CMD(或PowerShell)的当前路径为命令行工具所在目录,或者命令行工具所在目录已被包含在系统的环境变量path当中。在CMD(或Powershell)中输入下面的路径可更改当前路径:

  1. cd /d 目标路径

3、 格式

命令行工具命令格式一般为:

  1. 命令行工具名称 /命令参数1 /命令参数2

参数可以有多个,注意/符号前面有一个空格,注意所有字符均为半角字符(包括空格)。例子:

  1. DISM /?

上面这条命令作用是查看DISM工具的使用帮助内容。

以上三点可在下图中体现出来:

1312DISM-01

注:图中是在Win8.1下的截图。DISM工具是Win8/8.1系统自带的命令行工具,其路径为C:\Windows\system32,默认情况下该路径已包含在环境变量path当中。

整合镜像涉及到的命令详解

1、 查询wim中包含的各映像信息(包括索引、名称和描述)

  1. dism /get-imageinfo /imagefile:I:\sources\install.wim

注:索引即编号。上面的命令即为查询I:\sources\install.wim中包含的映像信息。

2、 删除wim中某个映像

  1. dism /delete-image /imagefile: F:\install.wim /index:1

注:上面的命令用于删除F:\install.wim中第1个映像。本条命令以及下面的命令都需要对install.wim进行修改,因此需要将install.wim从镜像中复制出来,不可用虚拟光驱加载。

3、 修改wim中某个映像的名称和描述

  1. imagex /info F:\install.wim 1 “Windows 8 企业版 [32位]” “Windows 8 Enterprise 32bit”

注:这是修改F:\install.wim中第1个映像的名称(第一个引号内的文字)和描述内容(笫二个引号内的文字),注意使用imageX不允许同一个wim中各映像有重名。

4、将一个wim中的某个映像复制到另一个wim中

  1. Dism /export-image /sourceimagefile:I:\sources\install.wim /sourceindex:1 /destinationimagefile:F:\install.wim /destinationname:”Windows 8 企业版 [64位]”

注:这是将I:\sources\install.wim中的第1个映像复制到F:\install.wim中,即在F:\install.wim中已有映像的基础上再加一个映像,并且将新添加的映像命名为Windows 8 企业版 [64位]。新添加的映像编号最大,即排在最后。F:\install.wim文件可以为空(即不存在),为空时系统会自动创建新的映像文件,映像编号从1开始,此时可以加上/Compress: maximum参数已达到最大压缩效果。可以去掉 /destinationname: ” Windows 8 企业版 [64位] “,即复制映像时保持原映像名称。

5、 将wim中的某个映像升级到更高版本

只有零售版镜像(通常都是多版本镜像)中的映像可以升级到高版本,批量授权版(通常都是包含一个版本,比如企业版和大客户专业版镜像)不可以升级。升级映像前需要先装载映像,升级后再提交更改并卸载映像。详细步骤:

① 装载映像

  1. dism /mount-image /imagefile:F:\install.wim /index:1 /MountDir:E:\Win8

注:上面的命令用于将E:\install.wim中的第一个映像装载到E:\Win8目录中,需事先创建E:\Win8文件夹。

② 查询可升级版本(即查询装载的映像可升级到哪个版本)

  1. dism /image:E:\Win8 /get-targeteditions

③ 升级到高版本

  1. dism /image:E:\Win8 /set-edition:ProfessionalWMC

注:以上命令将装载到E:\Win8的映像升级到ProfessionalWMC(即媒体中心)版。

④ 提交更改并卸载已装载映像

  1. dism /unmount-wim /mountdir:E:\Win8 /commit

6、打包ISO

将制作好的install.wim替换原版镜像中的install.wim即可,这里要注意几点:

① 如果整合映像同时包含32位和64位版本,请选择32位零售版镜像作为母本来打包。因为只有32 位 Windows 安装程序支持跨平台部署(微软官方说明,没有去验证。之前制作8.1多合一时也忽略了这一点)。

② 跳过密钥输入步骤实现安装时自选版本。对于win7,删除sources中的ei.cfg即可;对于Win8/8.1需添加ei.cfg

④ 目前UEFI均为64位,因此只有64位系统支持UEFI引导,要使制作好的镜像支持UEFI引导务必采用64位零售版镜像作为母本打包。要光盘UEFI引导打包时要加上UEFI参数,命令在下面会有说明。

⑤ 用U盘实现UEFI引导,文件系统必须为FAT32,而FAT32单文件大小限制在4G内,如果install.wim超过了4G,此时必须进行映像拆分。命令如下:

  1. Dism /Split-Image /ImageFile: F:\install.wim /SWMFile:D:\image\install.swm /FileSize:4096

上面的命令用于将F:\install.wim文件进行拆分,拆分后的文件最大为4G,并且将拆分后的文件存放到了D:\image中,拆分后的第一个文件名为install.swm、第二个为install2.swm,以此类推。打包时将拆分后的所有文件替换原版镜像中的install.wim即可。

⑥ 映像文件超过4.5G时需要指定启动顺序文件,以确保启动文件都位于映像的开头。可参考《Oscdimg 命令行选项》。

⑦ 不建议将不同版本号(例如Win8.1 9月份版和10月份版)整合到一起,因为整合后的文件会比较大。也不建议将不同代的系统整合到一起(比如win7+Win8),在安装时可能会出现问题。

打包命令:

制作仅包含传统引导方式(BIOS)的ISO镜像:

  1. Oscdimg -betfsboot.com -m -u2 -h -udfver102 -lHRM_CCSA_X64FRE_ZH-CN_DV5 -t8/22/2013,22:22:22 E:\isox64 E:\MyISO.iso

命令解释:

-b:指定要写入的启动扇区文件(这里是BIOS启动方式)
-m:忽略映像的最大大小限制
-u2:生成仅包含 UFD 文件系统的映像
-udfver102:指定了 UDF 文件系统版本 1.02
-l:指定卷标(就是加载镜像后在资源管理器中显示的名称)
-t:为所有文件和目录指定时间戳,资源管理器中文件修改日期统一显示为指定的时间。
E:\isox64 表示要打包的文件所在目录
E:\MyISO.iso 表示最终生成的文件。

制作包含传统引导方式(BIOS)以及UEFI引导的镜像:

  1. Oscdimg -bootdata:2#p0,e,bEtfsboot.com#pEF,e,bEfisys.bin -m -u2 -h -udfver102 -lHRM_CCSA_X64FRE_ZH-CN_DV5 -t8/22/2013,22:22:22 E:\isox64 E:\MyISO.iso

这里的-bootdata:2就表示含两种引导方式。

以上就是制作多合一镜像的基本原理和注意事项。更多的内容以后再补充,也可以参考微软官方文档《DISM 映像管理命令行选项》《Oscdimg 命令行选项》。

最后回答一下开头的问题,制作win7 32位旗舰版和64位旗舰版二合一镜像的步骤:

1、分别下载微软原版win7 32位旗舰版和64位旗舰版镜像[下载],用虚拟光驱加载两个镜像,假如32位旗舰版镜像盘符为E,64位旗舰版镜像盘符为F。因为制作的是32位+64位二合一,所以基于32位旗舰版镜像打包。解压32位旗舰版镜像到D:\Win7(即把boot,sources等文件或文件夹复制到D:\win7),删掉D:\win7\sources中的install.wim和ei.cfg(其实不删除ei.cfg文件也可以,因为旗舰版中ei.cfg指定系统版本为旗舰版,而镜像本身就是旗舰版二合一镜像,依然会出现选择列表)。

2、复制下载到的工具到D:\中(即把x86,amd64文件夹复制到D:\中),以管理员身份运行cmd,以此运行下面的命令即可。

  1. cd /d D:\x86
  2. Dism /export-image /sourceimagefile:E:\sources\install.wim /sourceindex:5 /destinationimagefile:D:\Win7\sources\install.wim /compress:maximum
  3. imagex /info D:\Win7\sources\install.wim 1 “Windows 7 旗舰版 [32位]” “Windows 7 Ultimate 32bit”
  4. Dism /export-image /sourceimagefile:F:\sources\install.wim /sourceindex:4 /destinationimagefile:D:\Win7\sources\install.wim
  5. imagex /info D:\Win7\sources\install.wim 2 “Windows 7 旗舰版 [64位]” “Windows 7 Ultimate 64bit”
  6. Oscdimg -betfsboot.com -m -u2 -h -udfver102 -lGSP1RMCULFRER_ZH-CN_DVD -t8/22/2013,22:22:22 D:\Win7 D:\MyWin7.iso

看看效果图:

1312DISM-02

So easy~是不是?

如果文章有查看密码,那就是ithome.com

评论 (共41条)

  1. 我用win10 64位做母本做的多合一系统,启动后没有选择版本界面怎么办?是不是不能用win10?

  2. 我想把win10、8还有7的64位32位镜像合在一起,用win1032位做母盘,不知道可行不可行。合在一起后安装系统不会出错把?

  3. 楼主,我遇到了一个问题:打包好的Windows7多合一镜像文件在安装的时候没有出现选择列表,而是直接安装了旗舰版,请问该怎么解决呢?

  4. 楼主您好,在改名时出现IMAGEX [FLAGS] /INFO img_file [img_number | img_name] [new_name] [new_desc] Returns the stored XML descriptions for the specified WIM or image.   img_file – The path of the WIM file to be queried for XML information.   img_number – The number that identifies an image within the WIM file.   img_name – The name that identifies an image within the WIM file.   new_name – The new unique name for the specified image.   new_desc – The new description for the specified image. Accepted FLAGS:   /BOOT   Marks a volume image as bootable. Available for Windows PE images only.   /CHECK   If not provided, existing checks are removed during updates.   /TEMP   Specifies the path where temporary files are stored.   /XML   Returns the output as well-formed XML. Example:   imagex /info d:imagingdata.wim 怎么办

  5. 提示“oscding”不是内部或外部命令,也不是可运行的程序或批处理文件,我的电脑已经安装部署工具了,这个该怎么解决啊,都弄了一整天了。

    1. 这个和安装盘没什么关系。提示缺少哪个版本的.net?要安装对应的版本。Win8/8.1安装后最好自己安装一下.net3.5。

      1. 我那个时候是win7,和盘之后装64位没问题,32位就报错,装.NET还是保存,索性放弃了,反正硬盘够大,32,64,的win7win8都有一份

  6. 楼主,你好!可以把w8各种系统镜像复制在一起制作镜像吗?如32位与64位可以交叉复制在一起?对了,制作后的镜像哈希值应该会改变吧?!如果镜像超过4.5G可以把WIN文件压缩吗?

      1. 直接运行软件dism.exe和通过命令都是一样的提示。win7 32位。我看了一下,windows/system32目录下确实缺少该dll文件,我尝试导入,但提示不兼容,如何解决?可否提供win7 32可用的该dll文件?

        1. 嗯,Win7中需要依赖一些dll。直接安装微软的部署工具就可以了,文章已修改。注意,Win7中安装ADK需要先安装.net 4.5。

  7. 豆哥(1)制作多和一系统映像的时候,假如我要制作一个32&64的windows8,而且装64的时候得支持uefi。可不可以?(2)我现在在我的电脑上把我的c盘系统备份文件wim(里面还有软件,不包含驱动),我是否可以做成启动盘,用于其他电脑的系统安装?谢谢!

    1. 要UEFI启动,必须基于64位打包。但是微软说明只有32位安装程序才支持跨平台部署。你可以试下看32位能不能正常安装。第二个问题涉及到封装,直接用捕获到的wim替换install.wim是不行的。有时间的话,我再专门针对这个问题写个教程。

发表评论

您的电子邮箱地址不会被公开。