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

如何通过NSIS脚本检测.NET Core 3.1 Windows桌面运行时是否已安装

NSIS脚本检测.NET Core 3.1 Windows桌面运行时方案

.NET Core系列运行时的检测逻辑和.NET Framework差异较大,你可以通过注册表检测、命令行校验两种方式实现,推荐两种组合使用提高检测准确率。

方法1:注册表检测(推荐,无环境依赖)

微软会在安装.NET桌面运行时后写入固定注册表项,NSIS直接读取对应项判断即可,支持区分x86/x64架构:

Var DotNetCore31Exist

Section "CheckDotNetCore31"
    StrCpy $DotNetCore31Exist 0
    ; 64位系统检测64位运行时
    ${If} ${RunningX64}
        ; 优先读桌面运行时专属注册表项
        ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows Desktop Runtime\v3.1" "Version"
        ${If} ${StrStartsWith} $0 "3.1."
            StrCpy $DotNetCore31Exist 1
        ${EndIf}
        ; 兜底读dotnet通用共享运行时注册表
        ${If} $DotNetCore31Exist == 0
            ReadRegStr $0 HKLM "SOFTWARE\dotnet\Setup\InstalledVersions\x64\shared\Microsoft.WindowsDesktop.App" "3.1.0"
            ${If} $0 != ""
                StrCpy $DotNetCore31Exist 1
            ${EndIf}
        ${EndIf}
    ${Else}
    ; 32位系统检测32位运行时
        ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows Desktop Runtime\v3.1" "Version"
        ${If} ${StrStartsWith} $0 "3.1."
            StrCpy $DotNetCore31Exist 1
        ${EndIf}
        ${If} $DotNetCore31Exist == 0
            ReadRegStr $0 HKLM "SOFTWARE\dotnet\Setup\InstalledVersions\x86\shared\Microsoft.WindowsDesktop.App" "3.1.0"
            ${If} $0 != ""
                StrCpy $DotNetCore31Exist 1
            ${EndIf}
        ${EndIf}
    ${EndIf}

    ; 未检测到运行时则执行静默安装
    ${If} $DotNetCore31Exist == 0
        ExecWait "$TEMP\windowsdesktop-runtime-3.1.32-win-x64.exe /install /quiet /norestart" $0
        ; 若返回3010则说明需要重启,可自行添加重启提示逻辑
    ${EndIf}
SectionEnd

注意:以上代码用到的${StrStartsWith}、${RunningX64}需要你引入NSIS的LogicLib、x64.nsh头文件。

方法2:命令行校验(兜底补充)

如果目标设备环境变量配置正常,可以调用dotnet命令查询已安装运行时列表,过滤匹配3.1版本的桌面运行时:

nsExec::ExecToStack 'dotnet --list-runtimes'
Pop $0 ; 取返回码
Pop $1 ; 取输出内容
${If} $0 == 0
    ${If} ${StrContains} $1 "Microsoft.WindowsDesktop.App 3.1."
        StrCpy $DotNetCore31Exist 1
    ${EndIf}
${EndIf}

注意事项

  • 按照你打包的应用架构匹配检测对应的运行时,32位应用只需要检测32位运行时即可
  • 不用严格匹配具体小版本号,所有3.1.x版本的桌面运行时都向下兼容同大版本的.NET Core 3.1应用
  • 运行时离线安装包可以提前打包进你的安装包资源里,检测失败时直接调用即可,不需要用户自行下载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:45:07