Официальный способ определить, установлена ли конкретная версия .NET Framework, - проверить наличие соответствующего раздела реестра. В этом случае вы ищете этот ключ:
HKLM\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0
Если присутствует значение REG_SZ «50727», то вы знаете, что установлена версия 2.0 платформы.
Итак, как вы делаете это в VBScript? Вот небольшой скрипт, который делает именно это:
Option Explicit
Dim oShell
Dim value
''#If the key isn't there when we try to read it, an error will be generated
''# that we will later test for, so we want to automatically resume execution.
On Error Resume Next
''#Try reading the registry value
Set oShell = CreateObject("WScript.Shell")
value = oShell.RegRead("HKLM\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0\50727")
''#Catch the error
If Err.Number = 0 Then
''#Error code 0 indicates success
MsgBox("Version 2.0 of the .NET Framework is installed.")
Else
''#Any other error code indicates failure
MsgBox("Version 2.0 of the .NET Framework is NOT installed.")
End If
Если вы хотите интегрировать эту проверку в существующий VBScript, я предлагаю вам превратить его в функцию, которая возвращает значение Boolean
(вместо отображения окна сообщения) в зависимости от того, или установлена неправильная версия .NET Framework. Затем вы можете вызвать эту функцию из вашего скрипта. Примечание: Убедитесь, что вы отключили обработку ошибок (или, по крайней мере, вернулись к более подходящему стилю) в конце функции, если вы идете по этому пути! Вы не хотите использовать On Error Resume Next
, если вы явно не обрабатываете ошибки позже в вашем коде.
On Error Goto 0 ''#Turn "On Error Resume Next" back off!
РЕДАКТИРОВАТЬ: Если вы убеждены, что хотите определить срок действия установки .NET, пытаясь создать экземпляр общего объекта Framework, сценарий очень похож. (На самом деле, это даже немного проще, чем доступ к реестру.) Как и раньше, CreateObject
используется, но на этот раз для создания экземпляра объекта базового класса System.Object
:
On Error Resume Next
Dim testObj
Set testObj = CreateObject("System.Object")
If Err.Number = 0 Then
MsgBox("Success")
Else
MsgBox("Failure")
End If
Однако, не сообщит вам, какая версия .NET Framework установлена. Этот тест будет проходить для любой версии, включая 1.1, 2.0, 4.0, будущие версии и т. Д. Ваш вопрос, по-видимому, содержит требование для версии 2.0, и если это так, вам действительно следует рассмотреть возможность использования первого варианта.
По моему опыту, такие «испорченные» установки Framework встречаются крайне редко, и если вы видите их так часто, как мне кажется, вы можете просто установить нужную версию Framework как само собой разумеющееся. Я не уверен, что возможность создания экземпляра объекта типа System.Object
на самом деле является более "истинным" тестом на достоверность установки Framework, чем проверка на наличие ключей или каталогов реестра.
Это было теперь проверено для работы на чистой виртуальной машине Windows XP без установленной .NET Framework. Это правильно сообщает о сбое. На других машинах с установленным .NET Framework он правильно сообщает об успехе.