无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 13013|回复: 9
打印 上一主题 下一主题

winre修复配置小结

  [复制链接]
跳转到指定楼层
1#
发表于 2018-11-15 18:09:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

目录:

一、Winre的两种路径文件夹格式
二、开机按F8出现修复计算机选项原理
三、配置winre步骤
    配置BCD以在下次系统启动时启动winre恢复
四、reagentc /info和C:\Windows\System32\Recovery中的ReAgent.xml里面的数据对应关系
五、常见错误
六、练习配置winre常用的命令
  
===========================================================================================================
下面内容中执行reagentc命令是以第一次配置winre且C:\Windows\System32\Recovery中的ReAgent.xml配置项的数据为空的前提下
===========================================================================================================
一、Winre的两种目录路径格式

1、Recovery\WindowsRE(Recovery必须在分区根目录下,必须是这种结构和文件名)

winre.wim和ReAgent.xml所在目录

a、winre.wim所在目录

如C:\Recovery\WindowsRE
winre.wim放在C:\Recovery\WindowsRE里面
boot.sdi不需要放在C:\Recovery\WindowsRE里面,当执行reagentc /enable成功时,在C:\Recovery\WindowsRE里面会自动生成boot.sdi
当执行reagentc /disable成功时,boot.sdi又从C:\Recovery\WindowsRE里面消失了

b、ReAgent.xml所在目录

C:\Windows\System32\Recovery(必须是这种结构和文件名)
ReAgent.xml放在C:\Windows\System32\Recovery里面

这样,所需文件就准备好了并放在相应的目录里
-----------------------------------------------------------------------------------------------------------
2、Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
(参见:自己打造Win7一键还原https://www.tceic.com/9g2jhh4gh90j6i85ki3gi6hj.html

winre.wim和ReAgent.xml所在目录

a、winre.wim所在目录

如C:\Recovery\e54f19ee-1d94-11e7-aefd-b31df5c176c4
(Microsoft Windows 7 旗舰版,6.1.7601 Service Pack 1 Build 7601里面就是这种格式)

reagentc /enable时,winre.wim在Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx中
reagentc /disable时,winre.wim在C:\Windows\System32\Recovery(必须是这种结构和文件名)

b、ReAgent.xml所在目录

C:\Windows\System32\Recovery(必须是这种结构和文件名)
ReAgent.xml放在C:\Windows\System32\Recovery里面
第一次配置时,执行reagentc /enable之前要将winre.wim放在C:\Windows\System32\Recovery里面

当执行reagentc /enable成功时,会自动在C盘生成Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
里面自动生成了boot.sdi,并把C:\Windows\System32\Recovery中的winre.wim自动剪切到里面
当执行reagentc /disable成功时,boot.sdi又从里面消失了,winre.wim自动剪切到C:\Windows\System32\Recovery
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx实际上是winre.wim在BCD中的启动标识,也就是执行reagentc /info结果里面的BCD Id:后面的数据

如果你提前在C盘建立了Recovery文件夹,reagentc /enable成功时仍然会生成上面的文件夹

注意:
第1种目录路径格式需要配置路径才能执行开启
第2种目录路径格式不需要配置路径,直接执行开启

执行reagentc /info结果两者有点不同
第2种reagentc /info结果中"WinRE.WIM 目录:后面没数据"

二、开机按F8出现修复计算机选项原理

1、winre修复环境实际上是系统bcd启动的一个winre.wim镜像,也就是具有恢复功能的一个pe,所以winre.wim在bcd中有配置项:启动项和设备项

reagentc配置winre正确后,在开机按 F8会出现“修复计算机”选项
其实开机按 F8出现“修复计算机”选项并不是reagentc自身的作用实现的,是配置reagentcwinre时,向bcd中操作系统(比如win7)标识项{win7id}写入了数据,比如:
recoverysequence {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}是winre在bcd中的标识

2、只要bcd中的{win7id}存在recoverysequence {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx},开机按F8会出现“修复计算机”选项

BCDEDIT是编辑bcd的工具,用它可实现开机按 F8出现“修复计算机”选项
随便写一个结构正确的bcd启动标识,比如:{00000000-0000-0000-0000-000000000000}
执行下面命令:
BCDEDIT -set {win7id} recoverysequence {00000000-0000-0000-0000-000000000000}
开机按F8也会出现“修复计算机”选项,当然它不能启动任何内容

按上面原理,把bcd中配置好的pe启动项的标识写入bcd的{win7id}中
本机PE启动的标识{f7e4e1d5-69a9-427f-934b-92c4180361b7}
BCDEDIT -set {win7id} recoverysequence {f7e4e1d5-69a9-427f-934b-92c4180361b7}
开机按F8出现“修复计算机”选项,选择“修复计算机”,就可启动PE了

3、由上面1中内容所知,当winre修复环境出问题时可能是bcd中相应配置出错,可以试着从bcd中解决问题

4、执行reagentc命令时对bcd的影响

当reagentc /disable时,用bcdedit查看,关于winre配置项(启动项和设备项)全部删除了
并且系统启动项中recoverysequence   {xx-xx-xx}没有了
recoveryenabled后面的Yes变成No

当reagentc /enable时,用bcdedit查看,关于winre配置项又出现了
并且系统启动项中recoverysequence   {xx-xx-xx}又出现了
recoveryenabled后面的No变成Yes

也就是说reagentc /enable和reagentc /disable是对winre.wim在bcd中生成相关项和删除已生成的相关项

5、直接手动删除在bcd中winre.wim已生成的相关项对reagentc相关命令的影响

经测试,删除后,执行reagentc /info查看结果和删除前reagentc /info查看结果一样
此时执行reagentc /disable会成功,再执行reagentc /enable,也会成功,又会在BCD生成相应的相关项
-----------------------------------------------------------------------------------------------------------
三、配置winre步骤

第1种目录路径格式:Recovery\WindowsRE

1、文件准备
在C盘建立Recovery\WindowsRE文件夹,将winre.wim放在里面
在C:\Windows\System32建立Recovery文件夹,将ReAgent.xml放在里面

2、配置路径
reagentc /setreimage /path C:\Recovery\WindowsRE

下面命令结果是一样的
reagentc /setreimage /path \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE
"\\?\GLOBALROOT\device\harddisk0\partition1"表示C盘
"\\?\GLOBALROOT\device\harddisk0\partition2"表示D盘

3、开启winre
reagentc /enable

至此,winre就配置好了

注意:需要配置路径才能执行开启,如果已开启了,要配置成其它路径,需要先执行关闭reagentc /disable
执行配置路径命令(reagentc /setreimage /path c:\Recovery\WindowsRE)时,只要c:\Recovery\WindowsRE这个目录结构在,winre.wim是否存在都会执行成功

将winre定义到C盘以外的其它分区,比如D盘
同样只能在根目录建立Recovery\WindowsRE文件夹,将winre.wim放在里面
在C:\Windows\System32建立Recovery文件夹,将ReAgent.xml放在里面
配置路径
reagentc /setreimage /path D:\Recovery\WindowsRE
开启winre
reagentc /enable
执行reagentc /enable后:
会在 D:\Recovery生成System32\Recovery文件夹,且里面有ReAgent.xml,ReAgent.xml是从C:\Windows\System32\Recovery自动拷贝来的,此时两处的ReAgent.xml内容一样

以后执行关闭、开启时,D:\RecoverySystem32\Recovery中的ReAgent.xml内容不变,C:\Windows\System32\RecoveryReAgent.xml的内容要变


第2种目录路径格式:Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

1、文件准备
在C:\Windows\System32建立Recovery文件夹,将winre.wim和ReAgent.xml放在里面

2、不需要配置路径,直接执行开启
reagentc /enable

至此,winre就配置好了,

配置BCD以在下次系统启动时启动winre恢复
reagentc /boottore命令执行后,重启时自动启动winre,实际上是向bcd写入了一次性启动序列,你也可以手动在bcd中创建一次性启动序列达到reagentc /boottore的效果
            

注意:

1、开启后会在C盘生成Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx文件夹,里自动生成boot.sdi文件,C:\Windows\System32\Recovery文件夹中的winre.wim消失,跑到C:\Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx中去了
关闭时,C:\Recovery\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx中的boot.sdi和winre.wim消失,winre.wim跑到C:\Windows\System32\Recovery中去了

2、这种结构不能自定义到其它分区

-----------------------------------------------------------------------------------------------------------

四、reagentc /info和C:\Windows\System32\Recovery中的ReAgent.xml里面的数据对应关系

测试条件:
winre环境所需文件齐备、路径正确、C:\Windows\System32\Recovery中的ReAgent.xml配置项的数据为空

第1种路径文件夹格式的对应情况:

当执行配置路径命令(reagentc /setreimage /path c:\Recovery\WindowsRE)成功后,ReAgent.xml里面<WinREStaged state=""/>的state由原来等于0变成等于1,当执行reagentc /info,显示结果:已暂存 Windows RE:   1,已启用 Windows RE:   0
那么是不是ReAgent.xml里面<WinREStaged state=""/>的state等于1,执行reagentc /info,显示结果就是已暂存 Windows RE:1,此时将
c:\Recovery\WindowsRE中的winre.wim删除或改名,再执行reagentc /info,显示结果却是已暂存 Windows RE:0
由此推测执行reagentc /info时,reagentc不仅要读取ReAgent.xml中的数据,还要检测c:\Recovery\WindowsRE中的winre.wim是否存在,<WinREStaged state=""/>的state要等于1且winre.wim存在,执行reagentc /info,显示结果才能是已暂存 Windows RE:1

路径配置成功后,再执行reagentc /enable,<WinREStaged state=""/>的state等于0,<InstallState state=""/>的state等于1,此时将
c:\Recovery\WindowsRE中的winre.wim和boot.sdi删除或改名,再执行reagentc /info,显示结果还是已启用 Windows RE:1

所以单凭执行reagentc /enable不能作出正确的判断,导致下一步不知到底该执行什么命令


第2种路径文件夹格式文件夹格式的对应情况:
不需要配置路径,执行reagentc /info,显示结果:已暂存 Windows RE:   1,已启用 Windows RE:   0

第2种路径文件夹格式,ReAgent.xml里面<WinREStaged state=""/>的state等于0,reagentc /info结果显示的暂存1次,此时将
C:\Windows\System32\Recovery中winre.wim删除或改名,再执行reagentc /info,显示结果却是已暂存 Windows RE:0,又恢复已删除或改名的winre.wim,把C:\Windows\System32\Recovery中的ReAgent.xml中<WinREStaged state=""/>的state等于0改为等于1,再执行reagentc /info,显示结果是已暂存 Windows RE:0

由此推测执行reagentc /info时,reagentc不仅要读取ReAgent.xml中的数据,还要检测c:\Recovery\WindowsRE中的winre.wim是否存在,
<WinREStaged state=""/>的state要等于0且winre.wim存在,执行reagentc /info,显示结果才能是已暂存 Windows RE:1

<WinreLocation path="" id="" offset="">和<ImageLocation path="" id="" offset="">的offset的值是winre.wim所在的分区的偏移值,分区的偏移值可用diskpart查看


ReAgent.xml中WinreLocation path对应reagentc /info结果中的恢复环境:
ReAgent.xml中ImageLocation path对应reagentc /info结果中的WinRE.WIM 目录:
ReAgent.xml中WinreBCD id对应reagentc /info结果中的BCD Id:

参考:
在部署 Windows 8.1 图像后,则无法生成 WinRE
https://support.microsoft.com/zh ... a-windows-8-1-image

原因
因为ImageLocation 路径标记设置为\Recovery\WindowsRE的值,并且在 Reagent.xml 文件中的WinREStaged 状态标记被设置为1 ,将出现此问题。有关详细信息,请转到详细信息部分。
通过删除ImageLocation 路径标记的值""。
将WinREStaged 状态标记的值设置为0


WinRE无法启用
https://answers.microsoft.com/zh ... 1-a19c-89844fb71b9c

-----------------------------------------------------------------------------------------------------------
五、常见错误

新安装的系统容易配置winre,因为ReAgent.xml是空白的,用一段时间后,出错,就比较复杂,可能是ReAgent.xml或其它文件不存在,可能是ReAgent.xml中的数据乱了,和其它文件不一至,也可能是bcd中关于winre的内容不见了或错了,可能是文件或文件夹是隐藏、只读、系统属性,最好是重建一套winre相关文件

当然要把bcd中原来关于winre的内容删除掉,比如bcd中标识符有以下内容的,都要删除此标识符,还要删除设备项
bcdedit /delete {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
ramdisksdipath          \Recovery
description             Windows Recovery Environment
recoverysequence        {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
recoveryenabled         Yes

reagentc /info结果:
REAGENTC.EXE: 操作失败: 3
系统找不到指定的路径。
错误原因:可能是文件或目录不存在

开启命令reagentc /enable
REAGENTC.EXE: 操作失败: 64e
没有卸载产品。
错误原因:可能是文件或目录不存在

开启命令reagentc /enable
REAGENTC.EXE: 操作失败: 5
拒绝访问。
错误原因:可能是文件或文件夹是隐藏、只读、系统属性,需要去掉这些属性

配置路径目录命令reagentc /setreimage /path c:\Recovery\WindowsRE
REAGENTC.EXE: 操作失败: b7
当文件已存在时,无法创建该文件。
错误原因:可能是已启用 Windows RE:   1,需要停用再执行配置路径目录命令

关闭命令reagentc /disable
REAGENTC.EXE: 操作失败: 2
系统找不到指定的文件。
错误原因:
1、可能是文件或目录不存在
2、reagentc /disable连续执行2次及以上,也会报同样的错
-----------------------------------------------------------------------------------------------------------
六、练习配置winre常用的命令

从boot.wim中提取winre.wim
imagex /export /boot \boot.wim 2 winre.wim "windows Recovery Environment"

把winre关联到操作系统,开机时按F8就会出现修复计算机
BCDEDIT -set {current} recoverysequence {00000000-0000-0000-0000-000000000000}
BCDEDIT -set {current} recoveryenabled Yes  当系统启动出现故障时,会自动启动winre
BCDEDIT -set {current} recoveryenabled No   当系统启动出现故障时,不会自动启动winre,只能手动开机按F8

你可以测试一下,把C:\windows\system32的winload.exe改为其它名称,当recoveryenabled为Yes时,启动win7,会自动启动winre,当recoveryenabled为Yes时,启动win7,不会自动启动winre

bcdedit -enum -v   启动标识项以数字显示,而不以{current}这种等形式显示
bcdedit /enum all  查看系统bcd内容
bcdedit /store 备份bcd /enum all 查看备份bcd内容
bcdedit /enum all>>bcdinfo.txt

bcdedit /import 备份bcd 导入备份的bcd
bcdedit /export 备份bcd  导出备份的bcd

bcdedit /delete {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}(标识符)
此命令删除启动配置数据存储中的项
bcdedit /deletevalue {current} recoverysequence 标识符 参数名 注意:不需要参数值
bcdedit /deletevalue {current} recoveryenabled
此命令从启动配置数据存储的项中删除数据元素

md c:\Recovery\WindowsRE
start c:\Recovery\WindowsRE

md C:\Windows\System32\Recovery
start C:\Windows\System32\Recovery

echo f|xcopy /H /C /Y /R D:\thReAgent.xml" C:\Windows\System32\Recovery\ReAgent.xml
xcopy /H /C /Y /R D:\winre.wim C:\Recovery\WindowsRE\

dir /a-d /s "C:\Recovery"

去除文件属性
attrib -r -h -s C:\Recovery\* /d /s

reagentc /info
reagentc /enable
reagentc /disable

配置路径:
下面两个命令结果是一样的
"\\?\GLOBALROOT\device\harddisk0\partition1"表示C盘
"\\?\GLOBALROOT\device\harddisk0\partition2"表示D盘
reagentc /setreimage /path c:\Recovery\WindowsRE
reagentc /setreimage /path \\?\GLOBALROOT\device\harddisk0\partition1\Recovery\WindowsRE

点评

经过此贴学习,终于解决winre的修复问题。  发表于 2021-11-4 18:31

评分

参与人数 3无忧币 +15 收起 理由
wywangwang + 5 很给力!
sx3k + 5 很给力!
foolst + 5 很给力!

查看全部评分

9#
发表于 2021-11-6 10:04:21 | 只看该作者
这个要学习
回复

使用道具 举报

8#
发表于 2021-11-4 17:03:34 | 只看该作者
xx1
回复

使用道具 举报

7#
发表于 2021-11-4 16:46:18 | 只看该作者
谢谢分享
收藏学习
回复

使用道具 举报

6#
发表于 2019-5-12 18:18:50 | 只看该作者
技术大神,辛苦了,谢谢分享,学习中
回复

使用道具 举报

5#
发表于 2019-1-27 14:59:04 | 只看该作者
非常感谢,收藏研究
回复

使用道具 举报

4#
发表于 2018-11-16 12:17:47 | 只看该作者
终于有专门专业 Winre 资料了.
回复

使用道具 举报

3#
发表于 2018-11-16 09:47:11 | 只看该作者
支持下,看上去还是有点麻烦,还是直接弄个PE启动项算了
回复

使用道具 举报

2#
发表于 2018-11-16 06:31:12 来自手机 | 只看该作者
技术好贴
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-20 03:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表