无忧启动论坛

标题: 请问下有没有命令行工具添加UEFI引导序列? [打印本页]

作者: liuzhaoyzz    时间: 2020-2-1 09:00
标题: 请问下有没有命令行工具添加UEFI引导序列?
本帖最后由 liuzhaoyzz 于 2020-4-6 07:15 编辑

请问下有没有命令行工具添加UEFI引导序列?
就是想要实现bootice里面的添加UEFI引导序列的功能。如图所示。bootice添加UEFI引导序列似乎不支持命令行吧?
linux下面似乎有个efibootmgr命令,这个命令有没有人移植到windows下面?
GitHub - rhboot/efibootmgr: efibootmgr development tree https://github.com/rhboot/efibootmgr

2020.4.5日pauly大神编译了一个booticex64_1.4版本已经支持了。
详见27楼http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=418717&pid=4026764&fromuid=298214


uefi引导序列.png (106.66 KB, 下载次数: 337)

uefi引导序列.png

作者: 窄口牛    时间: 2020-2-1 09:12
bootice只能添加有存储的主板,有的主板没有存储,就只能修改,做不了添加,easyuefi可以。
作者: 窄口牛    时间: 2020-2-1 09:14
win的efi引导是bios自动添加的,所以他的命令行对别的第三方efi添加即便有,估计也很差。
作者: fjzjk    时间: 2020-2-2 00:06
win一般就是直接bcdboot了
作者: liuzhaoyzz    时间: 2020-2-2 07:09
fjzjk 发表于 2020-2-2 00:06
win一般就是直接bcdboot了


     可是bcdboot只能写入windows引导到UEFI-ROM中,其他的efi启动项不行啊,比如写入grub2x64.efi就不行,但bootice就可以,只是不支持命令行。   
作者: 窄口牛    时间: 2020-2-2 08:24
看看cywin有没有相关的工具。
作者: 窄口牛    时间: 2020-2-4 17:26
efi shell
  1. bcdf boot dump # 列出当前启动项
  2. bcfg boot rm 1 # 删掉编号为 1 的启动项
  3. bcfg boot mv 2 0 # 将编号为 2 的启动项移动到第一项
  4. bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd" # 在 fs0 分区,添加如下路径启动项
复制代码

win下bcdedit
  1. 对存储执行的命令
  2. ================================
  3. /createstore    新建空的启动配置数据存储。
  4. /export         将系统存储的内容导出到文件。以后可以使用该文件还原系统
  5.                 存储的状态。
  6. /import         使用 /export 命令创建的备份文件来还原系统存储的状态。               
  7. /sysstore       设置系统存储设备(仅影响 EFI 系统,在重新启动后不再有效,
  8.                 且仅用于系统存储设备不确定的情况下)。

  9. 对存储中的项执行的命令
  10. ===========================================
  11. /copy           复制存储中的项。
  12. /create         在存储中新建项。
  13. /delete         删除存储中的项。
  14. /mirror         创建存储中项的镜像。

  15. 运行 bcdedit /? ID 可获得有关这些命令使用的标识符的信息。

  16. 对项选项执行的命令
  17. ======================================
  18. /deletevalue    删除存储中的项选项。
  19. /set            设置存储中的项选项值。

  20. 运行 bcdedit /? TYPES 可获得这些命令使用的数据类型的列表。
  21. 运行 bcdedit /? FORMATS 可获得有效数据格式的列表。

  22. 控制输出的命令
  23. ============================
  24. /enum           列出存储中的项。
  25. /v              命令行选项,完整显示项标识符,而不是使用已知标识符的名称。               
  26.                 单独使用命令 /v 可完整显示活动类型的项标识符。               

  27. 单独运行 "bcdedit" 等同于运行 "bcdedit /enum ACTIVE"。

  28. 控制启动管理器的命令
  29. ======================================
  30. /bootsequence   为启动管理器设置一次性启动序列。
  31. /default        设置启动管理器将使用的默认项。
  32. /displayorder   设置启动管理器显示多重引导菜单的顺序。               
  33. /timeout        设置启动管理器的超时值。
  34. /toolsdisplayorder  设置启动管理器显示工具菜单的顺序。                    

  35. 控制启动应用程序紧急管理服务的命令
  36. ==========================================================================
  37. /bootems        启用或禁用启动应用程序的紧急管理服务。               
  38. /ems            启用或禁用操作系统项的紧急管理服务。               
  39. /emssettings    设置全局紧急管理服务参数。

  40. 控制调试的命令
  41. ==============================
  42. /bootdebug      启用或禁用启动应用程序的启动调试。
  43. /dbgsettings    设置全局调试程序参数。
  44. /debug          启用或禁用操作系统项的内核调试。               
  45. /hypervisorsettings  设置虚拟机监控程序的参数。
复制代码

linux下
  1. 移除
  2. sudo efibootmgr -b B
  3. 增加(sda7 -> sda -p 7)
  4. efibootmgr -c -d /dev/sda -p 7 -L -l \EFI<lable>\grubx64.efi
  5. 设置激活
  6. sudo efibootmgr -b -a
  7. 设置禁用
  8. sudo efibootmgr -b -A
  9. 调整顺序
  10. sudo efibootmgr -o
复制代码



作者: liuzhaoyzz    时间: 2020-2-4 17:56
本帖最后由 liuzhaoyzz 于 2020-2-5 06:51 编辑
窄口牛 发表于 2020-2-4 17:26
efi shell

win下bcdedit


  我想要的是windows(或PE)平台下添加修改UEFI引导序列的命令行工具,不是efi shell下的,也不是linux下的啊。 bcdboot或者bcdedit只能添加windows的引导,不能添加其他UEFI引导,比如grub2x64.efi。     
作者: 窄口牛    时间: 2020-2-4 19:31
本帖最后由 窄口牛 于 2020-2-4 19:33 编辑

可以呀,你把grub2的名字改成win的,放到微软的默认路径,这样bios就会自动添加了,命令执行这些很简单吧,改改文件夹名字,再改改文件名字就完成了。win10可以任意路径被grub2来chainload的,win7不可以,必须默认路径,可以给win7专门弄一个esp分区,这样就可以了。
作者: liuzhaoyzz    时间: 2020-2-5 07:51
本帖最后由 liuzhaoyzz 于 2020-2-5 07:53 编辑
窄口牛 发表于 2020-2-4 19:31
可以呀,你把grub2的名字改成win的,放到微软的默认路径,这样bios就会自动添加了,命令执行这些很简单吧, ...


  把grub2x64.efi改名成为bootx64.efi放在efi\boot\不是我想要的结果,我想要的是新增一个UEFI引导序列与之并列,不要覆盖系统的,绕路解决的思路不是我想要的。
EasyUEFI命令行介绍太少,我没有深入研究,他太大了,似乎还要破解。
希望有大神能够写个基于windows API的小程序实现,或者有已经实现的小程序推荐下也好。   

作者: 窄口牛    时间: 2020-2-5 08:29
既然匿名者回答了,那估计确实是没有。我见csdn有efibootmgr的源码,不知道有没有用,高手们可以下来看看。
作者: yao2004    时间: 2020-2-5 08:56
我来看看一
作者: liuzhaoyzz    时间: 2020-2-5 11:44
本帖最后由 liuzhaoyzz 于 2020-2-5 11:50 编辑
匿名者 发表于 2020-2-5 08:51
https://github.com/ju-funk/efibootwin

这个应该大概能满足你的要求。会c++的话自己再改一改应该就可以 ...


  谢谢分享,晚点我研究下。(手机回复)      
作者: liuzhaoyzz    时间: 2020-2-5 16:14
本帖最后由 liuzhaoyzz 于 2020-2-5 16:33 编辑
匿名者 发表于 2020-2-5 08:51
https://github.com/ju-funk/efibootwin

这个应该大概能满足你的要求。会c++的话自己再改一改应该就可以 ...

水平不够啊。参数里面我没看到怎么添加个启动项的readme啊。你能帮忙该写下吗?请帮忙做个静态编译。




作者: liuzhaoyzz    时间: 2020-3-11 16:50
       再次顶下帖子,希望有大神们能够出手啊!
@匿名
@wintoflash
@pauly
@chenall
@yaya2007777
@......


作者: wintoflash    时间: 2020-3-11 17:04
艾特我没用。我不会。
求人不如求己。
作者: liuzhaoyzz    时间: 2020-3-11 19:56
wintoflash 发表于 2020-3-11 17:04
艾特我没用。我不会。
求人不如求己。

      我只能用VC写个Hello world。。。  
作者: liuzhaoyzz    时间: 2020-3-14 13:11
本帖最后由 liuzhaoyzz 于 2020-3-14 13:37 编辑
匿名者 发表于 2020-2-5 08:51
https://github.com/ju-funk/efibootwin

这个应该大概能满足你的要求。会c++的话自己再改一改应该就可以 ...

  他这个工程是VC2015的项目,我电脑现有的只有VC2010绿色便携版,尝试用VC2010打开并编译,提示VisualStudioVersion什么的错误,按照网上的办法改了下VisualStudioVersion也不行。

网上搜索了下VC2015精简版https://pan.baidu.com/s/1eStFQ8M#rwzw 密码:rwzw,999MB,下载之后又提示没有windows SDK,又下载适用于当前系统的windows SDK,我的操作系统是WIN10LTSC.17763,814MB,Windows SDK 存档 - Windows 应用开发 https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
下载这个之后,又按照网上的办法,修改文件编码为Unicode-1200,添加了库文件,
#include <memory>
#pragma comment (lib,"Advapi32.lib")
项目属性→常规→目标平台工具集改成VS2015
预编译头不使用。
改了下变量unsigned int为int,消除warning。
折腾了好久,终于编译通过了他的项目。

但是添加UEFI序列的功能还是没搞懂怎么改。


我把改过的源代码传上来,静态编译后的efibootwin.exe,169KB,也传上来。

E:\efibootwin-master-liuzhaoyzz\Release>E:\efibootwin-master-liuzhaoyzz\Release\efibootwin.exe /?
efibootwin create by J. Funk, Ver 0.8.5


The syntax of efibootwin [command command]:
The commands can be begin with '-' or '/'
The commands are:


   ?            Help
   n            Get the BootNext Value
   N  idx       Set the BootNext Value with idx (hex)
   e  Name      Set the BootNext Value over the Name
   E            Remove the BootNext Value
   c            Get the BootCurrent Value
   o            Get the BootOrder
   O  x,y,zzzz  Set the BootOrder (hex)
   r            Get the BootOrder (Name)
   R            Remove the BootOrder
   v            Get the DriverOrder
   V  x,y,zzzz  Set the DriverOrder (hex)
   a            Get the DriverOrder (Name)
   A            Remove the DriverOrder
   t            Get the Timeout Value
   T  idx       Set the Timeout Value with idx (hex)
   I            Remove the Timeout Value
   b            List the BootXXXX
   B            List all the BootXXXX (have wait...)
   d            List the DriverXXXX
   D            List all the DriverXXXX (have wait...)
   f  idx       Toggle the Active-Flag of Boot idx (hex)
   F  Name      Toggle the Active-Flag with Boot decription
   d  idx  Des  Change the description of Boot idx (hex)
   D  Name Des  Change the description (Des) with Boot decription (Name)


Without commands you get all the available Uefi-variables

请高手研究改进下。

https://www.lanzous.com/b00nekg8h
密码:9qa4

      



efibootwin.rar

75.41 KB, 下载次数: 60, 下载积分: 无忧币 -2


作者: liuzhaoyzz    时间: 2020-3-14 20:09
本帖最后由 liuzhaoyzz 于 2020-3-17 11:18 编辑

        看你的回帖,懂得c语言啊,触类旁通,差不多吧。
你分享的第三个帖子520行,似乎就是添加UEFI启动序列的,我看不懂,shell下的bcfg命令源码
https://github.com/tianocore/edk2/blob/master/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
作者: linuxdisk    时间: 2020-3-26 10:29
最近在研究引导,进来学习一下
作者: wintoflash    时间: 2020-3-26 11:05
liuzhaoyzz 发表于 2020-3-14 13:11
他这个工程是VC2015的项目,我电脑现有的只有VC2010绿色便携版,尝试用VC2010打开并编译,提示VisualSt ...

试了一下,这个程序目前能执行以下操作:
1. 设置 BootCurrent
2. 设置 BootNext
3. 设置 BootOrder
4. 设置 Timeout
5. 设置 BootXXXX 的属性
6. 设置 BootXXXX 的名称
你还需要自己实现以下功能:
1. 新建 BootXXXX
2. 编辑 BootXXXX 的内容。

BootXXXX 就是形如 Boot0000, Boot0001, Boot0002 这样的 UEFI 环境变量,内容可以在 UEFI Spec 里面找到,
typedef struct _EFI_LOAD_OPTION {
UINT32 Attributes;
UINT16 FilePathListLength;
// CHAR16 Description[];
// EFI_DEVICE_PATH_PROTOCOL FilePathList[];
// UINT8 OptionalData[];
} EFI_LOAD_OPTION;
其中关键的就是那个 FilePathList 。
你需要把 efi 文件在 windows 下的路径 (E:\EFI\BOOT\grubx64.efi) 转化为 UEFI 的 DevicePath 格式。
DevicePath 具体长啥样请查阅 UEFI Spec。
顺便说一下,我就是楼上的匿名。

作者: liuzhaoyzz    时间: 2020-3-26 11:11
本帖最后由 liuzhaoyzz 于 2020-3-26 11:15 编辑
wintoflash 发表于 2020-3-26 11:05
试了一下,这个程序目前能执行以下操作:
1. 设置 BootCurrent
2. 设置 BootNext

       你说的对,目前就是缺少add的功能,增加这部分功能代码我看不懂,也是缺乏耐心。

我联系了pauly,他最近工作很忙,他说抽空在bootice已有的代码上修改个命令行测试版本,发给我,已有的代码,从GUI改成CUI,对于pauly来说,难度应该不大,这些主要的函数他之前写好了的,他是需要时间精力和兴趣。


作者: liuzhaoyzz    时间: 2020-4-6 07:13
本帖最后由 liuzhaoyzz 于 2020-4-6 21:35 编辑

bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi" /title="\EFI\boot\grub2x64.efi"
inspos, insert position,插入位置,0-最大项;非法时放最后。
Bootice引导序列里面的顺序可能和实际启动的时候有差别,因为有些引导项目是UEFI固件提供的,这些引导项windows是不能读取的。
/file=参数里面,盘符需要先挂载。
该命令多次运行会多次添加,如果不想重复添加,可以先删除原有的引导序列。

bootice删除uefi引导序列命令行
BOOTICEx64.exe /uefi /delete /file="I:\EFI\boot\grub2x64.efi"
/file=参数里面,盘符需要先挂载。

需要说明的是,BOOTICEx86版本,只要能够正常运行,可以用来在64位和32位windows中添加UEFI序列,BOOTICEx64只能用于64位windows中。
32位的UEFI固件很少,似乎只有早期的WIN8平板电脑才有32位的UEFI固件。

注意由于bootice在2016年的时候丢失了一部分源代码,BOOTICEx64_1.4版本部分功能是不完整的,比如主引导记录、分区管理等,暂时无法完全取代1.3.4版本!等pauly大神有空的时候再完善吧。


bootice增加删除uefi引导序列命令行.rar

773.71 KB, 下载次数: 371, 下载积分: 无忧币 -2


作者: mxai    时间: 2020-4-20 20:24
路过。
作者: mxai    时间: 2020-4-20 21:02
同问。
作者: 悠然安然    时间: 2020-6-4 11:16
各位大侠,请教一个问题
我用U盘做了WTG+PE,在PE的菜单上有“title [7] 启动 硬盘上的操作系统”这一项,可总是找不到硬盘启动系统,请看看是不是MENU.LST 下面的语句需要修改?谢谢

title [7] 启动 硬盘上的操作系统
find --set-root --ignore-floppies --ignore-cd /ntldr ||  find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr ||  find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /ntldr || chainloader /bootmgr

作者: 江南一根葱    时间: 2020-7-3 16:16
liuzhaoyzz 发表于 2020-4-6 07:13
bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi"  ...

不知道bootice能不能添加“下一次启动该项”的功能。。
作者: liuzhaoyzz    时间: 2020-7-3 17:20
悠然安然 发表于 2020-6-4 11:16
各位大侠,请教一个问题
我用U盘做了WTG+PE,在PE的菜单上有“title [7] 启动 硬盘上的操作系统”这一项, ...

菜单没问题,但是只是用于BIOS启动,不能适用于UEFI。
作者: liuzhaoyzz    时间: 2020-7-3 17:21
江南一根葱 发表于 2020-7-3 16:16
不知道bootice能不能添加“下一次启动该项”的功能。。

        当时我找pauly的时候,没有增加这个功能。如果他出手的话,是很简单的。问题是他很忙。
作者: wintoflash    时间: 2020-7-3 17:46
liuzhaoyzz 发表于 2020-7-3 17:21
当时我找pauly的时候,没有增加这个功能。如果他出手的话,是很简单的。问题是他很忙。

一根葱不是发现bcdedit可以编辑uefi启动项吗。
作者: 坏坏小生    时间: 2020-12-16 20:58
liuzhaoyzz 发表于 2020-3-26 11:11
你说的对,目前就是缺少add的功能,增加这部分功能代码我看不懂,也是缺乏耐心。

我联系了paul ...

难度确实不大,理解完整个结构体,读入分区的起扇区和总扇区数,分区GUID,再加点路径字符串和显示字符串和其它一些参数写进去就可以了,从零开始写代码的话,最多两天时间,如果有写过的代码改造的话,最多几个小时就搞定
作者: sanshen3    时间: 2021-2-6 17:46
学习一下
作者: 2013dgyangxf    时间: 2021-4-2 20:59
这个问题我也早就发现了,但是一直也不知道怎么提问,哈哈,没想到有人已经解答过了,真是太感谢了。这么好的方法都没几个人关心么?看来UEFI还是很少人研究啊
作者: Luojc1    时间: 2021-12-13 12:13
liuzhaoyzz 发表于 2020-4-6 07:13
bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi"  ...

这个程序还有吗
作者: liuzhaoyzz    时间: 2021-12-24 20:42
Luojc1 发表于 2021-12-13 12:13
这个程序还有吗

自己下载附件!
作者: 风.轻扬    时间: 2022-1-9 17:05
liuzhaoyzz 发表于 2020-4-6 07:13
bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi"  ...

学习了,谢谢
作者: game6777    时间: 2022-1-30 23:15
学习一下,谢谢了
作者: wfaming    时间: 2023-1-29 09:57
过来看看
作者: 追光少年    时间: 2023-2-28 11:16
感谢分享
作者: 追光少年    时间: 2023-2-28 11:16
学习一下
作者: 遨游的风    时间: 2023-2-28 14:59
有直接的命令吗?不依赖
bootice
作者: liuzhaoyzz    时间: 2023-3-3 18:19
遨游的风 发表于 2023-2-28 14:59
有直接的命令吗?不依赖
bootice

没见过。
作者: 遨游的风    时间: 2023-3-3 21:02
liuzhaoyzz 发表于 2023-3-3 18:19
没见过。


bootice现在有添加“下一次启动该项”的功能的命令吗?目前就在bootice和diskginus上见过这个功能,但都不知道怎样调用他们的命令
作者: liuzhaoyzz    时间: 2023-3-3 21:28
遨游的风 发表于 2023-3-3 21:02
bootice现在有添加“下一次启动该项”的功能的命令吗?目前就在bootice和diskginus上见过这个功能,但 ...

我没有用过这个命令参数。
作者: Bluebells    时间: 2023-4-20 10:24
bcdedit 和 EasyUEFIC (EasyUEFI 附带的命令行版本) 都可以以命令行方式添加 UEFI 引导序列。不过 bcdedit 支持的 OS Type 只有 Windows,不过其它 OS Type 的 EFI 文件也一样能作为 Windows OS Tpye 启动,只是在某特殊情况下会有一些问题
作者: tsee    时间: 2023-7-4 16:22
liuzhaoyzz 发表于 2020-4-6 07:13
bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi"  ...

不了
作者: tsee    时间: 2023-7-5 14:11
liuzhaoyzz 发表于 2020-4-6 07:13
bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi"  ...

能不能放个网盘地址下载

作者: Boringman    时间: 2023-7-5 14:28
liuzhaoyzz 发表于 2020-4-6 07:13
bootice添加uefi引导序列命令行
BOOTICEx64.exe /uefi /add /inspos=1 /file="I:\EFI\boot\grub2x64.efi"  ...

从github上下载的原来不是原作者发布的,不支持这个cmd命令。注册账号评论下。
话说有人知道Pauly大神除了本论坛还有其他发布渠道吗?ipauly.com网址无法访问了。
作者: chesson    时间: 2023-7-8 21:21
        赞一个!
作者: liuzhaoyzz    时间: 2023-7-12 21:49
tsee 发表于 2023-7-5 14:11
能不能放个网盘地址下载

https://www.123pan.com/s/lE5A-QLdyv.html
作者: liuzhaoyzz    时间: 2023-7-12 21:50
Boringman 发表于 2023-7-5 14:28
从github上下载的原来不是原作者发布的,不支持这个cmd命令。注册账号评论下。
话说有人知道Pauly大神除 ...

他已经不更新bootice了。兴趣使然吧。
作者: pda8888    时间: 2023-8-16 21:35
其实,用bcdedit 增加 UEFI 启动序列,我也折腾了很久,最后翻到一个不知名的墙外网站,最终找到了答案:
3个核心步骤:
1、复制{bootmgr}
  1. bcdedit /copy {bootmbr} /d "My UEFI"
复制代码

如果不出意外,这步执行完了之后,会显示:已将该项目成功复制到{guid}
2、指定{guid}的启动分区(或通过mountvol挂载的目录也行)
  1. bcdedit /set {guid} device partition=x:
  2. 或bcdedit /set {guid} device partition=mountpath
复制代码

3、指定{guid}的启动文件
  1. bcdedit /set {guid} path \efi\boot\bootx64.efi
复制代码

这3步核心步骤做完,已经成功添加了UEFI启动项,通过
  1. bcdedit /enum firmwae
复制代码
,是可以列表出来刚刚添加的"My UEFI",而且,是写入了NVRAM的,也就意味着可以在主板的BIOS启动设置里面看到这个UEFI启动项。
剩下的还有扫除垃圾的工作,就是删除这个新启动项的local、inherit、resumobjedt、toolsdisplayeorder、timeout
折腾死人了,网上太多臭文,都是教你如何添加基于已经安装好的windows下的子启动项。
作者: liuzhaoyzz    时间: 2023-8-18 16:15
pda8888 发表于 2023-8-16 21:35
其实,用bcdedit 增加 UEFI 启动序列,我也折腾了很久,最后翻到一个不知名的墙外网站,最终找到了答案:
...

能用这个添加grub2x64.efi的NVROM引导项吗?怕是不行吧?
你这个可能只能适用于微软的bootmgfw.efi建立NVROM引导项。
作者: pda8888    时间: 2023-8-19 20:50
已经添加成功过了,有bootice查看能看到,在BIOS的UEFI启动选项也能看到。
作者: szwp    时间: 2023-8-19 21:05
liuzhaoyzz 发表于 2023-8-18 16:15
能用这个添加grub2x64.efi的NVROM引导项吗?怕是不行吧?
你这个可能只能适用于微软的bootmgfw.efi建立N ...

当然行,群友前几年就试过了
作者: szwp    时间: 2023-8-19 21:11
bcdedit添加nvram序列有限制,得有项可供copy
作者: Bluebells    时间: 2023-8-19 21:14
本帖最后由 Bluebells 于 2023-8-19 21:22 编辑
pda8888 发表于 2023-8-19 20:50
已经添加成功过了,有bootice查看能看到,在BIOS的UEFI启动选项也能看到。

但关键是不支持使用第三方工具编辑用 bcdedit 创建的 EFI 启动项(很早之前, 我的某帖子中有说明这个情况)
使用 bcdedit 创建 EFI 文件的启动项还有一个致命缺点, 那就是在某些机子中, 会自动将新建的 EFI 启动项变为默认启动项(有几个人反馈有出现这种问题)
关于使用 bcdedit 创建 EFI 启动项的示例, 可以参考我的帖子Lenovo UEFI OKR 部署工具[+基于PECMD的开源版]中的"Lenovo_UEFI_OKR_部署工具PECMD开源版"里面的源码脚本


作者: szwp    时间: 2023-8-21 15:43
https://www.powershellgallery.com/packages/UEFIv2/2.7

Add-UEFIBootEntry -Name "Linux" -FilePath "\EFI\BOOT\BOOTX64.EFI"
作者: pda8888    时间: 2023-8-21 20:57
szwp 发表于 2023-8-21 15:43
https://www.powershellgallery.com/packages/UEFIv2/2.7

Add-UEFIBootEntry -Name "Linux" -FilePath " ...

这个牛B,好资源,下回来研究一下。
作者: pda8888    时间: 2023-8-21 21:02
Bluebells 发表于 2023-8-19 21:14
但关键是不支持使用第三方工具编辑用 bcdedit 创建的 EFI 启动项(很早之前, 我的某帖子中有说明这个情况) ...

可以在创建好EFI启动项之后,用 addlast 移动到最后。
作者: Bluebells    时间: 2023-8-21 21:05
pda8888 发表于 2023-8-21 21:02
可以在创建好EFI启动项之后,用 addlast 移动到最后。

默认启动项与启动顺序没有关联
作者: sensenw    时间: 2023-8-27 11:34
多谢分享!!
作者: 2013kyj    时间: 2023-8-29 23:50
pda8888 发表于 2023-8-16 21:35
其实,用bcdedit 增加 UEFI 启动序列,我也折腾了很久,最后翻到一个不知名的墙外网站,最终找到了答案:
...

多谢大佬分享, 怎样判断当前系统是不是UEFI引导的呢
作者: 2013kyj    时间: 2023-8-30 10:21
pda8888 发表于 2023-8-16 21:35
其实,用bcdedit 增加 UEFI 启动序列,我也折腾了很久,最后翻到一个不知名的墙外网站,最终找到了答案:
...

我第2第3条命令为什么一执行就出错呢, 指示引用指定项时出错, 我已经将第一步的guid替换到{guid}了
作者: 2013kyj    时间: 2023-8-30 10:22
szwp 发表于 2023-8-21 15:43
https://www.powershellgallery.com/packages/UEFIv2/2.7

Add-UEFIBootEntry -Name "Linux" -FilePath " ...

这个资源不支持win7 只能win10
作者: pda8888    时间: 2023-8-30 15:31
2013kyj 发表于 2023-8-30 10:21
我第2第3条命令为什么一执行就出错呢, 指示引用指定项时出错, 我已经将第一步的guid替换到{guid}了

把1、2、3步的命令和输出结果、错误提示贴出来看看。
作者: 2013kyj    时间: 2023-8-30 16:11
pda8888 发表于 2023-8-30 15:31
把1、2、3步的命令和输出结果、错误提示贴出来看看。

不好意思大佬, 我把生成的guid两边的{}删了, 加上就行了
作者: 2013kyj    时间: 2023-8-30 16:13
pda8888 发表于 2023-8-30 15:31
把1、2、3步的命令和输出结果、错误提示贴出来看看。

大佬, 红色字部分能设置分区的id吗, 不用盘符
bcdedit /set {guid} device partition=z:
作者: pda8888    时间: 2023-8-30 16:30
2013kyj 发表于 2023-8-30 16:13
大佬, 红色字部分能设置分区的id吗, 不用盘符
bcdedit /set {guid} device partition=z:

可以是盘符,也可以是mountvol挂载的目录。
我的浅见:这里指定的盘符,是不会写入到nvram的,盘符是windows的概念,不是EFI的概念,bcdedit会把根据提供的盘符对应的物理磁盘和分区号(即这两个的guid)记录到nvram里面,就脱离了盘符的概念。
作者: pda8888    时间: 2023-8-30 16:34
2013kyj 发表于 2023-8-29 23:50
多谢大佬分享, 怎样判断当前系统是不是UEFI引导的呢

答案就在bcdedit
  1. bcdedit /enum {current}
复制代码
Windows 启动加载器
-------------------
标识符                  {current}
device                  partition=C:
path                    \windows\system32\winload.efi
description             Windows 11
locale                  zh-CN
inherit                 {bootloadersettings}

如果 path 中给出的路径是 winload.efi ,则说明系统是通过 UEFI 模式启动的了
作者: 2013kyj    时间: 2023-8-30 16:40
pda8888 发表于 2023-8-30 16:34
答案就在bcdedit

多谢大佬指导,
怎样把添加项设为第一个引导项呢, 我用下面的方法, 会自动创建第二个项,两个项的名字一样
bcdedit /default {guid}
作者: pda8888    时间: 2023-8-30 20:31
{guid}肯定不一样。

1. 选择下次启动的{GUID}项(一次性有效)



  1. bcdedit /set {fwbootmgr} bootsequence {GUID}
复制代码



2. 置顶或置尾:


  1. bcdedit /set {fwbootmgr} displayorder {GUID} /addfirst
复制代码





  1. bcdedit /set {fwbootmgr} displayorder {GUID} /addlast
复制代码


bcdedit并不关心{GUID}是否已经存在,已经存在也不会报错。
作者: tsee    时间: 2023-9-7 16:56
wintoflash 发表于 2020-3-26 11:05
试了一下,这个程序目前能执行以下操作:
1. 设置 BootCurrent
2. 设置 BootNext

研究的怎么样了




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3