我创建了一个脚本,用于检测通过注册表安装的已安装.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
答案 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