Задача:
Необходимо проверить установлен ли в системе MS Access либо в составе MS Office либо самостоятельно, как среда выполнения Access Runtime
Решение:
Для этого пишем сценарий, который сначала пытается создать объект «Access.Application», и, если удается, значит в системе установлен MS Access в составе MS Office.
Если при создании объекта происходит ошибка, то проверяется ключ «SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\» реестра на предмет нахождения записи, включающей в себя строку «access runtime». Если такая запись находится в какой-либо записи в этом ключе, то значит в системе установлена среда выполнения Access Runtime.
Иначе - в системе Access никак не установлен.
Код сценария на VBS
Код: Выделить всё
'Определяем константы и инициализируем переменные для проверки установки Access
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
strComputer = "localhost"
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strEntry1a = "DisplayName"
AccessStatus = "NotInstalled"
'Если удается создать объект Access.Application, значит Access в составе MS Office установлен и ошибку не получим (код ошибки = 0)
'Иначе получим ошибку, для чего включаем обработчик ошибок
On Error Resume Next
Set AccShell = CreateObject("Access.Application")
If Err.Number = 0 Then AccessStatus = "Access + MS Office yet installed"
On Error GoTo 0
'Отключаем обработчик ошибок
'Если Access в составе MS Office не установлен, то начинаем проверку установлен ли Access Runtime
If AccessStatus = "NotInstalled" Then
'Для этого перебираем ключ UNINSTALL реестра
Set objReg = GetObject("winmgmts://" & strComputer & _
"/root/default:StdRegProv")
objReg.EnumKey HKLM, strKey, arrSubkeys
'Получаем значения ключей реестра
For Each strSubkey In arrSubkeys
intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _
strEntry1a, strValue1)
If intRet1 <> 0 Then
objReg.GetStringValue HKLM, strKey & strSubkey, _
strEntry1b, strValue1
End If
'Если значение непустое
If strValue1 <> "" Then
'Если значение ключа содержит "access runtime"
If Instr(1,LCase(strValue1),"access runtime") Then
'WScript.Echo VbCrLf & "Display Name: " & strValue1
'Значит Access Runtime установлен
AccessStatus = "Access Runtime yet installed"
End if
End If
Next
End if
MsgBox AccessStatus
Скачать архив со сценарием можно здесь: