首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VBS通过WMI检测.Net Framework3.5或更高版本

使用VBS通过WMI检测.Net Framework3.5或更高版本
EN

Stack Overflow用户
提问于 2015-03-19 14:36:48
回答 2查看 5.9K关注 0票数 2

我已经创建了一个脚本来检测通过注册表安装的.Net框架。该条件应特别检测3.5或更高版本,并继续这一过程。但是,使用注册表似乎是不可能的。每次安装新版本时,您都必须搜索并输入注册表,或者修改脚本以使其正常工作。

然后我在谷歌上搜索,它可以通过WMI完成,这似乎是可行的。我已经修改了脚本,以灵活,即使有新安装的.net框架高于3.5,它将自动检测3.5或更高版本安装。不幸的是,如果脚本检测到安装了较低版本或没有安装的.net框架,那么脚本就不能工作,脚本应该退出,并且不会继续这个过程。

代码语言:javascript
复制
WriteLog "Checking if there is .Net Framework 4.5, .Net Framework 4.0 and .Net Framework 3.5 installed on the machine.."
If ((RegValueExists("HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL\{8E34682C-8118-31F1-BC4C-98CD9675E1C2}\")) AND (RegValueExists("HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL\{F5B09CFD-F0B2-36AF-8DF4-1DF6B63FC7B4}\"))) Then

    WriteLog"Framework 4 detected on system. "
    WriteLog "Proceeding with installation..."

ElseIf FrameworkCheck("3.5") Then

    'Proceed with installation

End If

函数FrameworkCheck

代码语言:javascript
复制
Function FrameworkCheck(strVersion)

Dim strComputer, objWMIService, colItems, strVar, objItem

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select Name, Version from Win32_Product Where Name Like 'Microsoft .NET Framework%'")

For Each objItem in colItems

    If objItem.Version => strVersion Then

        WriteLog "Detected Framework Version: " & objItem.Version & " - " & objItem.Name
        WriteLog "Proceeding with installation..."

    ElseIf objItem.Version <> 0 Then

        WriteLog "NOK-Framework 3.5 or later not detected on system. Installation not possible. Please check basic client installation"
        WScript.Quit(-1)            

    End If

Next

End Function
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 14:44:26

相反,您可能希望有一个函数来获取最大框架版本,然后更改调用代码以查看它是否返回最低要求的>=版本(我还没有检查这个版本的语法):

代码语言:javascript
复制
Function MaxFrameworkVersionCheck()

Dim strComputer, objWMIService, colItems, strVar, objItem, maxVersion

maxVersion = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select Name, Version from Win32_Product Where Name Like 'Microsoft .NET Framework%'")

For Each objItem in colItems
    WriteLog "Detected Framework Version: " & objItem.Version & " - " & objItem.Name
    If objItem.Version > maxVersion Then

        maxVersion = objItem.Version

    End If

Next

MaxFrameworkVersionCheck = maxVersion

End Function
票数 3
EN

Stack Overflow用户

发布于 2015-03-20 07:42:14

您还可以使用Environment.Version来检查运行时版本,而不是注册表。请参阅此文档以获得更多详细信息:b

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29147427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档