使用VBS通过WMI检测.Net Framework 3.5或更高版本

时间:2015-03-19 14:36:48

标签: .net vbscript detection wmi-query

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

然后我在Google上搜索了它可以通过WMI完成,这似乎会起作用。我已将脚本修改为灵活,即使安装了高于3.5的.net框架,它也会自动检测安装的3.5或更高版本。不幸的是,如果脚本检测到安装了较低版本或没有安装.net框架,则一个条件不起作用,脚本应该退出并且不会继续该过程。

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
  

Function FrameworkCheck

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

2 个答案:

答案 0 :(得分:3)

你可能希望有一个函数来获取max framework版本,然后更改调用代码以查看它是否返回&gt; =所需的最低版本(我还没有检查过这个语法):

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

答案 1 :(得分:0)

您还可以使用Environment.Version来检查运行时版本而不是注册表。有关详细信息,请参阅此文档:https://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#clr_b