Estou montando o instalador dos meus aplicativos e surgiu-me a necessidade de detectar se o Access da máquina é o Runtime ou não. Preferi não apoiar me no build number para isto.
Claro que a linguagem lá não é VBScript, mas segue aqui a lógica que usei.
Claro que a linguagem lá não é VBScript, mas segue aqui a lógica que usei.
- Código:
option explicit
on error resume next
dim objEdReg
dim strCaminhoAcc
dim strVerAcc
dim booRuntime
set objEdReg = CreateObject("wscript.shell")
strCaminhoAcc = objEdReg.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\msaccess.exe\Path")
if err then
err.clear
call msgbox("Nenhuma versão MS Access instalada.", vbExclamation, "Ops!")
else
strVerAcc = right(strCaminhoAcc, 3)
strVerAcc = left(strVerAcc, 2)
if win64 then
if cbyte(strVerAcc) = 12 then
booRuntime = objEdReg.RegRead("HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Office" & strVerAcc & ".AccessRT\DisplayName")
elseif objEdReg.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & strVerAcc & ".0\Outlook\Bitness") = "x64" then
booRuntime = objEdReg.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Office" & strVerAcc & ".AccessRT\DisplayName")
else
booRuntime = objEdReg.RegRead("HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Office" & strVerAcc & ".AccessRT\DisplayName")
end if
else
booRuntime = objEdReg.RegRead("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Office" & strVerAcc & ".AccessRT\DisplayName")
end if
if err then
err.clear
booRuntime = 0
else
booRuntime = -1
end if
end if
if booRuntime then
call msgbox("Access ativo é a versão Runtime.", vbInformation, "Informação")
else
call msgbox("Access ativo não é a versão Runtime.", vbInformation, "Informação")
end if
set objEdReg = nothing
'função auxiiliar para detectar se a máquina é ou não 64 bits
function win64()
dim objWMIService
dim colOperatingSystems
dim objOperatingSystem
set objWMIService = getObject("winmgmts:\\.\root\cimv2")
set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
for each objOperatingSystem in colOperatingSystems
win64 = instr(objOperatingSystem.OSArchitecture,"64") > 0
next
end function