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

如何在WIX中获取命令/脚本执行结果并检测Win10及以上系统

在WIX中捕获脚本输出并赋值给属性(检测Win10及以上系统)

问题根源

你当前使用的WixShellExec是用于启动外部程序的自定义动作类型,它无法捕获脚本的输出内容并赋值给WIX属性,只能返回执行成功/失败状态,这就是你无法获取版本值的原因。

解决方案

方法1:直接使用WIX内置属性判断(推荐)

Windows Installer本身提供了内置属性VersionNT,可直接用来判断系统版本:

  • Win10及Win11的VersionNT值为1000及以上
  • Win7对应601,Win8对应602,Win8.1对应603

如果只是需要判断是否为Win10及以上系统,无需额外脚本,直接在条件中使用:

<!-- 示例:仅在Win10及以上系统执行某个动作 -->
<CustomAction Id="YourTargetAction" ... />
<InstallExecuteSequence>
  <Custom Action="YourTargetAction" After="InstallInitialize">VersionNT >= 1000</Custom>
</InstallExecuteSequence>

方法2:用VBScript自定义动作获取版本并赋值属性

如果需要将系统版本号赋值给自定义属性,可使用内嵌VBScript编写自定义动作:

<CustomAction Id="GetWindowsMajorVersion" Script="vbscript" Execute="immediate">
<![CDATA[
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colOS = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS in colOS
  ' 提取系统主版本号,Win10及以上主版本为10
  Session.Property("WindowsMajorVersion") = Split(objOS.Version, ".")(0)
Next
]]>
</CustomAction>

<!-- 在UI序列中调用该动作 -->
<InstallUISequence>
  <Custom Action="GetWindowsMajorVersion" After="AppSearch" />
</InstallUISequence>

之后即可在WIX中通过[WindowsMajorVersion]引用该属性,判断值是否大于等于10。

方法3:使用批处理脚本配合正确的自定义动作类型

若坚持使用bat脚本,需将自定义动作改为支持捕获输出的类型,步骤如下:

  1. 修改test.bat脚本,将版本号输出到标准输出:
@echo off
:: 从注册表读取系统主版本号
for /f "tokens=3" %%g in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentMajorVersionNumber') do (
  echo %%g
)
  1. 在WIX中定义自定义动作时,使用Type="18"(表示捕获脚本输出到属性),替换原来的WixShellExec:
<Binary Id="OSMajorVersionScript" SourceFile="test.bat" />

<CustomAction Id="GetWindowsMajorVersion"
              Execute="immediate"
              Property="WindowsMajorVersion"
              Return="check"
              Impersonate="yes"
              BinaryKey="OSMajorVersionScript"
              Type="18"/>

<!-- 在UI序列中调用 -->
<InstallUISequence>
  <Custom Action="GetWindowsMajorVersion" After="AppSearch" />
</InstallUISequence>

这种方式会将bat脚本的标准输出内容直接赋值给WindowsMajorVersion属性。

内容的提问来源于stack exchange,提问作者junhong fan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:22:34