2013xiaokang 发表于 2016-11-29 14:32:02

求助各位高手关于UEFI模式下用bcdedit添加PE启动项目的问题

本帖最后由 2013xiaokang 于 2016-11-29 14:33 编辑

各位大大门好,如题,求助一下是怎么回事,批处理代码如下:
@echo off
set RAMDISK_OPTIONS={e92b8e30-a6e5-41f6-a6b9-188230a23dd2}
set RAMDISK_OPTIONS2={e92b8e30-a6e5-41f6-a6b9-188230a23dd3}
set WINPE_GUID={54b4c01f-dce0-102a-a4e0-462c07a00c5e}
set WINPE_GUID2={54b4c01f-dce0-102a-a4e0-462c07a00c5f}
bcdedit /timeout 10
bcdedit /create %RAMDISK_OPTIONS% /d "启动 PE 32位" /device
bcdedit /set %RAMDISK_OPTIONS% ramdisksdidevice partition=D:
bcdedit /set %RAMDISK_OPTIONS% ramdisksdipath \Boot\boot.sdi
bcdedit /create %WINPE_GUID% /d "启动 PE 32位" /application OSLOADER
bcdedit /set %WINPE_GUID% device ramdisk=\Boot\PE32.wim,%RAMDISK_OPTIONS%
bcdedit /set %WINPE_GUID% path \windows\system32\winload.exe
bcdedit /set %WINPE_GUID% osdevice ramdisk=\Boot\PE32.wim,%RAMDISK_OPTIONS%
bcdedit /set %WINPE_GUID% systemroot \windows
bcdedit /set %WINPE_GUID% detecthal yes
bcdedit /set %WINPE_GUID% nx optin
bcdedit /set %WINPE_GUID% winpe yes
bcdedit /set %WINPE_GUID% locale "zh-CN"
bcdedit /displayorder %WINPE_GUID% /addlast
bcdedit /create %RAMDISK_OPTIONS2% /d "启动 PE 64位" /device
bcdedit /set %RAMDISK_OPTIONS2% ramdisksdidevice partition=D:
bcdedit /set %RAMDISK_OPTIONS2% ramdisksdipath \Boot\boot.sdi
bcdedit /create %WINPE_GUID2% /d "启动 PE 64位" /application OSLOADER
bcdedit /set %WINPE_GUID2% device ramdisk=\Boot\PE64.wim,%RAMDISK_OPTIONS2%
bcdedit /set %WINPE_GUID2% path \windows\system32\winload.exe
bcdedit /set %WINPE_GUID2% osdevice ramdisk=\Boot\PE64.wim,%RAMDISK_OPTIONS2%
bcdedit /set %WINPE_GUID2% systemroot \windows
bcdedit /set %WINPE_GUID2% detecthal yes
bcdedit /set %WINPE_GUID2% nx optin
bcdedit /set %WINPE_GUID2% winpe yes
bcdedit /set %WINPE_GUID2% locale "zh-CN"
bcdedit /displayorder %WINPE_GUID2% /addlast
exit
以上代码,在bios启动模式下一切正常,可在UEFI启动模式下,把加载项改成winload.efi就不能启动了,显示自动修复,请问各位高手,小弟错在哪儿了,文件肯定都有的,还望不吝赐教,谢谢。

红毛樱木 发表于 2016-11-29 14:42:20

winload.exe
换成
winload.efi
前提是文件路径对

2013xiaokang 发表于 2016-11-29 16:04:09

谢谢红毛大大的回复,用过您的作品,非常好用。
不过,我能保证路径是对的,bios是\windows\system32\winload.exe,uefi是\windows\system32\boot\winload.efi,不知道为什么就是启动不了,写到优盘上efi模式能顺利启动,证明efi文件没问题,可是写到硬盘上就是不能启动,就是那个windows未能启动,自动修复的对话框。
补充一点,我本机系统是win7x64,但是在win10上也通不过,我的pe是8.1的。

红毛樱木 发表于 2016-11-29 16:05:23

win7的bootmgr或者bootmgr.efi类似文件是引导不了高版本的windows的

2013xiaokang 发表于 2016-11-29 16:09:37

可是10也不行啊

Mindfly 发表于 2016-11-29 16:39:51

我的笔记本,也是遇到了怪事。
本来uefi+gpt正常安装和启动的,现在因故需要重新安装,突然无法安装了,复制windows文件时没有反应。
即使是部署映像到C分区,添加启动项到efi分区,也是无法启动。
换bios+mbr,一切正常。
大惑不解,百思不得其解。

2013xiaokang 发表于 2016-11-29 16:55:44

楼上重新用dg快分试试,用diskpart有时候设置gpt guid会有问题,另外,windows要求efi必须>=100M,且最好有128 MB的MSR分区。

2013xiaokang 发表于 2016-11-29 17:08:36

我的问题有没有哪位高手知道的?我刚才按照红毛大大的指示,换了我pe里面的boot.efi还是不行,我现在无比郁闷。

KaiDo 发表于 2016-11-29 17:14:16

朋友的一台 GigaByte NB (UEFI+GPT == 内定)
用着觉得怪怪的就Ghost回当初的系统备存档
试数回皆卡在第一个开机处,改安全模式同卡
重上新的问题照旧!?
后来改 BIOS+MBR 延用至今尚未发现异常

不知 发表于 2016-11-29 19:51:48

先用bootice改一下BCD,新建启动项,看能不能启动?
如果不能启动,可能是wim内核出了问题。
如果能启动,可能是所用的GUID与原来系统中recoveryd的启动项冲突了。换一个GUID.也不排除有其它的可能性,比如BOOT.SDI路径不对,系统默认的BCD储存与实际启动时的BCD储存不一致等。

parsons 发表于 2016-11-29 21:49:26

WINPE_GUID={54b4c01f-dce0-102a-a4e0-462c07a00c5e}
WINPE_GUID2={54b4c01f-dce0-102a-a4e0-462c07a00c5f}
使用 bootice 檢查上面這兩個啟動項添加情形

2013xiaokang 发表于 2016-11-30 02:00:33

谢谢楼上各位的回复,我的guid是没有问题的,因为都能成功创建,如果guid冲突是不能创建的,wim内核应该没问题,因为用优盘efi能启动,也就是用U+V2能启动。sdi文件路径应该是没问题的,都在分区boot文件夹下,一个是\boot\boot.sdi,另一个是\boot\pe32或64.wim,继续疑惑中。

不知 发表于 2016-11-30 11:47:01

本帖最后由 不知 于 2016-11-30 11:51 编辑

2013xiaokang 发表于 2016-11-30 02:00
谢谢楼上各位的回复,我的guid是没有问题的,因为都能成功创建,如果guid冲突是不能创建的,wim内核应该没 ...

硬盘上的系统版本?是不是高于PE的版本?如果不是,试一下用PE的bootx64.EFI,bootia32.EFI,bootmgr.efi,bootmgfw.efi替换硬盘上的引导文件。

zhangmi 发表于 2016-11-30 13:45:26

boot.sdi最好指定一下,我的就是默认的路径不知道怎么回事不能用,然后boot.sdi最好也换成pe上面的

Mindfly 发表于 2016-12-27 13:20:29

2013xiaokang 发表于 2016-11-29 16:55
楼上重新用dg快分试试,用diskpart有时候设置gpt guid会有问题,另外,windows要求efi必须>=100M,且最好有 ...

你好,刚刚重游此贴,看到了你的回复,
我用了diskpart,DG,以及Gparted,均失败了,
我建立的EFI分区有1536MB,MSR有512MB,也是失败了M,
谢谢

双响炮 发表于 2019-9-29 10:00:47

2013xiaokang 发表于 2016-11-29 16:04
谢谢红毛大大的回复,用过您的作品,非常好用。
不过,我能保证路径是对的,bios是\windows\system32\winl ...

不知道楼主这个问题最终找到原因没有,我也是前不久遇到了这个问题,但不一样的是,长期以来,同样的PE,同样是安装到UEFI的电脑上,成功居多,目前只遇到过两台电脑出现这样的情况,实在是郁闷

wanghh 发表于 2019-11-25 16:42:39

学习了。

manageken 发表于 2019-12-10 04:13:04

同问,正需要这个

hilsonma 发表于 2019-12-10 06:27:32

manageken 发表于 2019-12-10 04:13
同问,正需要这个

uefi模式下,64位的cpu必须使用64位的引导程序引导64位的操作系统,不能使用32位的引导程序,也不能引导32位的操作系统,这是跟传统模式不同的。
现在的电脑基本都是64位的cpu了,所以32位的PE是不能在uefi模式下引导成功的。除非个别的平板电脑,有可能是32位的cpu.

uefi模式下,添加pe启动项,先将 pe64.wim 和 boot.sdi 放在 c:\boot 文件夹,然后使用bcdedit 如下添加菜单项:

@echo off
for /f "tokens=2 delims={}" %%a in ('bcdedit /create /application osloader') do set Guid={%%a}
bcdedit /set %Guid% description "启动 PE 64位"
bcdedit /set %Guid% device ramdisk=\Boot\PE64.wim,{ramdiskoptions}
bcdedit /set %Guid% osdevice ramdisk=\Boot\PE64.wim,{ramdiskoptions}
bcdedit /set %Guid% systemroot \Windows
bcdedit /set %Guid% detecthal 1
bcdedit /set %Guid% winpe 1

bcdedit /displayorder %Guid% /addlast
bcdedit /timeout 10
bcdedit /set {bootmgr} nointegritychecks 1

bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=C:
bcdedit /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi

要添加额外的PE,只需如下:
@echo off
for /f "tokens=2 delims={}" %%a in ('bcdedit /create /application osloader') do set Guid={%%a}
bcdedit /set %Guid% description "启动 PE2 64位"
bcdedit /set %Guid% device ramdisk=\Boot\PE64_2.wim,{ramdiskoptions}
bcdedit /set %Guid% osdevice ramdisk=\Boot\PE64_2.wim,{ramdiskoptions}
bcdedit /set %Guid% systemroot \Windows
bcdedit /set %Guid% detecthal 1
bcdedit /set %Guid% winpe 1
bcdedit /displayorder %Guid% /addlast

不管多少PE,都使用相同的boot.sdi,所以不需要额外设置。

开始要求将 pe64.wim 和 boot.sdi 放在 c:\boot 文件夹,是为了确保启动成功。成功后再尝试改放 d:\boot ,相应的也将以上批处理中的C: 改成 D:
不过在我的电脑上好象放逻辑分区不能成功启动,所以我建议放 c盘。

当然,最好的还是放在efi分区,这时批处理应该是这样:
@echo off
for /f "tokens=2 delims={}" %%a in ('bcdedit /create /application osloader') do set Guid={%%a}
bcdedit /set %Guid% description "启动 PE 64位"
bcdedit /set %Guid% device ramdisk=\Boot\PE64.wim,{ramdiskoptions}
bcdedit /set %Guid% osdevice ramdisk=\Boot\PE64.wim,{ramdiskoptions}
bcdedit /set %Guid% systemroot \Windows
bcdedit /set %Guid% detecthal 1
bcdedit /set %Guid% winpe 1

bcdedit /displayorder %Guid% /addlast
bcdedit /timeout 10
bcdedit /set {bootmgr} nointegritychecks 1

bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice boot
bcdedit /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi

念青 发表于 2020-3-1 22:29:12

学习。回头试一下,除了c:\boot,PE是不是也可以放在ESP分区里?

ws4liu 发表于 2020-8-31 11:13:14

遇到同样问题,按照红毛大大的提示改成winload.efi就好了,谢谢!
页: [1]
查看完整版本: 求助各位高手关于UEFI模式下用bcdedit添加PE启动项目的问题