You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Wix安装程序中获取系统BIOS版本以校验前置条件?

在Wix中获取系统BIOS版本并实现前置条件检查

Wix本身没有内置的BIOS版本属性,需要通过**自定义动作(Custom Action)**读取WMI(Windows Management Instrumentation)中的BIOS信息来实现,具体步骤如下:

1. 编写C#自定义动作读取BIOS版本

创建一个C#类库项目,引用Microsoft.Deployment.WindowsInstaller(可通过NuGet安装WiX Toolset Custom Action包),实现读取BIOS版本的方法:

using Microsoft.Deployment.WindowsInstaller;
using System.Management;

namespace BiosCheckCustomAction
{
    public class CustomActions
    {
        [CustomAction]
        public static ActionResult GetBiosVersion(Session session)
        {
            session.Log("Starting BIOS version retrieval");
            try
            {
                var searcher = new ManagementObjectSearcher("SELECT SMBIOSBIOSVersion FROM Win32_BIOS");
                foreach (ManagementObject obj in searcher.Get())
                {
                    session["BIOS_VERSION"] = obj["SMBIOSBIOSVersion"]?.ToString() ?? string.Empty;
                    session.Log($"Retrieved BIOS version: {session["BIOS_VERSION"]}");
                    break;
                }
                return ActionResult.Success;
            }
            catch (Exception ex)
            {
                session.Log($"Error retrieving BIOS version: {ex.Message}");
                return ActionResult.Failure;
            }
        }
    }
}

编译生成DLL文件备用。

2. 在Wix项目中注册自定义动作

在你的Wix安装包项目里,添加自定义动作的二进制引用,并定义执行逻辑:

<!-- 引入自定义动作DLL -->
<Binary Id="BiosCheckCA" SourceFile="..\BiosCheckCustomAction\bin\Release\BiosCheckCustomAction.dll" />

<!-- 定义自定义动作 -->
<CustomAction Id="GetBiosVersion" 
              BinaryKey="BiosCheckCA" 
              DllEntry="GetBiosVersion" 
              Execute="immediate" 
              Return="check" />

<!-- 安排自定义动作在前置条件检查前执行 -->
<InstallUISequence>
    <Custom Action="GetBiosVersion" Before="LaunchConditions" />
</InstallUISequence>
<InstallExecuteSequence>
    <Custom Action="GetBiosVersion" Before="LaunchConditions" />
</InstallExecuteSequence>

3. 配置BIOS版本前置条件及后续检查

现在可以通过自定义动作生成的BIOS_VERSION属性,设置前置条件,并控制后续检查的执行顺序:

<!-- 先检查BIOS版本,不符合则终止后续检查 -->
<Condition Id="BIOSCheck" 
            Message="BIOS版本必须至少为1.2.3才能继续安装,请更新BIOS后重试。">
    BIOS_VERSION >= "1.2.3" OR NOT Installed
</Condition>

<!-- 仅当BIOS版本符合要求时,才检查其他前置条件 -->
<Condition Message=".NET Framework 4.8未安装。" 
            After="BIOSCheck">
    BIOS_VERSION >= "1.2.3" AND NETFRAMEWORK48
</Condition>

<Condition Message="系统磁盘空间不足。" 
            After="BIOSCheck">
    BIOS_VERSION >= "1.2.3" AND (FreeSpace &gt;= 10485760)
</Condition>

注意事项

  • 不同厂商的BIOS版本格式可能存在差异(如数字版、字母数字混合版),若版本格式非标准语义化版本,需在自定义动作中添加自定义版本比较逻辑,再将结果存入Wix属性供条件判断使用。
  • 读取Win32_BIOS无需额外权限,但安装程序本身通常需要管理员权限,确保自定义动作能正常执行。

内容的提问来源于stack exchange,提问作者Sachin Deoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:40:27