c++ - Detect BIOS from WinPE : Legacy or UEFI, using vbs//Outputting results from a .exe to .txt 文件

标签 c++ legacy bios efi

这是我的场景:

我的服务器有 2 种可能的配置:不需要特殊处理的 2 TB HDD 或需要 UEFI BIOS 和 GPT 分区来启动操作系统的 3 TB HDD。

我正在尝试创建一个单一的安装 USB key ,它能够检测 BIOS 是“传统”还是“UEFI”并相应地执行部署脚本。

我努力寻找可以区分的 WMI,但无济于事。

我最接近解决方案的是这篇文章: http://social.technet.microsoft.com/Forums/en-US/winserverManagement/thread/6cbb488d-3062-4aad-b712-7a9e4d045b13

detectefi.exe 在检测 BIOS 类型方面工作得很好,但我无法输出它的结果,所以我不知道如何使用它。

我有两个问题:

  1. 是否有任何 WMI 可用于区分我的 2 个设置。

  2. (如果问题 1 的答案是否定的)有没有办法将 C++ 编译的 .exe 文件的结果输出到 .txt 或任何其他形式并利用结果(我没有 C++ 技能完全没有)

最佳答案

如果有人对我如何解决问题感兴趣。我刚刚创建了一个链接到 .exe 的 vbs

    Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("detectefi.exe")
Set objStdOut = objWshScriptExec.StdOut

dim isLegacy
dim isUefi

isLegacy = false
isUefi = false

While Not objStdOut.AtEndOfStream
   strLine = objStdOut.ReadLine

   if strLine = "Legacy" then
      isLegacy = true
   end if

   if strLine = "UEFI" then
      isUefi = true
   end if
Wend


if isLegacy then
   wscript.echo "this is legacy"

    set objShell = Wscript.CreateObject("WScript.Shell")
    objShell.Run "2TBdeploy.cmd",1,True
    set objShell = Nothing

end if


if isUefi then
   wscript.echo "this is UEFI"

    set objShell = Wscript.CreateObject("WScript.Shell")
    objShell.Run "3TBdeploy.cmd",1,True
    set objShell = Nothing

end if

关于c++ - Detect BIOS from WinPE : Legacy or UEFI, using vbs//Outputting results from a .exe to .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884495/

相关文章:

c++ - STL有hashmap数据结构吗?

c++ - 在用 C++ 编写字符串的过程中按 'Enter'

c++ - 在字符串之间插入字符

java - 旧 servlet-api-2.3.jar 上的 HttpServletRequest 注销

assembly - 为什么我的引导加载程序的堆栈段位于 0x3FF(实模式 IVT 的末尾)?

c++ - 加载共享库时出错 : jvm. dll

code-analysis - 哪些开源工具可以帮助我理解用 C 编写的大型遗留应用程序?

.net - 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具

assembly - 引导加载程序总是弄乱 Int 13h 调用加载内核的前两个字节

assembly 控制台模式一字符