Existe um comando em lote para verificar a instalação do Access 2010 Runtime?

0

Ao usar um arquivo em lote, existe um comando que eu possa usar para verificar se o Access 2010 Runtime está instalado no momento e, se não estiver, invoque sua instalação?

Isso será usado no Windows 7 e no Windows XP.

Editar: procurando uma maneira de verificar a instalação do programa sem saber onde os arquivos são colocados quando o Access Runtime está instalado.

    
por CharlieRB 24.04.2012 / 17:39

4 respostas

2

Você pode ler as informações do registro:

reg.exe QUERY HKLM\SOFTWARE\Classes\Access.Application.14\shell\Open\command /ve

Este comando lê o caminho MSAccess.EXE do registro. Você só precisa salvá-lo em uma variável e depois remover o lixo em torno dele. Isso pode ser feito usando o comando "for".

    
por 25.04.2012 / 16:00
1

Estou surpreso que você não tenha encontrado esse comando | Se não for ACCESS2000RunTimeInstallation RUN ACCESS2000RuntimeInstallation
; -)

Mas de qualquer forma,

Aqui está o princípio.

Eu tenho um arquivo chamado a.a e um diretório chamado c: \ windows. Eu não tenho um arquivo chamado a.b e eu não tenho um diretório chamado c: \ windows1

Pode-se dizer

if exist a.a c:\program\program.exe

Nos exemplos abaixo, você pode substituir "echo here", com o caminho de um programa

Agora, descubra quais arquivos o item de instalação do Access 2000 coloca no disco rígido e escolha um único, ou um diretório criado, e use-o para a sua instrução IF.

C:\>if exist a.a echo here
here

C:\>if exist a.b echo here

C:\>if exist c:\windows\nul echo here
here

C:\>if exist c:\windows1\nul echo here

C:\>

Atualizar -

Você também pode verificar o registro

Como exemplo, qualquer que seja o programa, um lugar onde você pode ver a coisa é em Adicionar / Remover programas. Aqui é o lugar no registro onde isso é armazenado. Você pode executar esse comando e rolar através disso apenas para ter uma idéia do comando

C:\>reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Unins
tall | more

Um programa listado é o Windows Media Player, que você também tem

C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Unin
stall\Windows Media Player"

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Windows M
edia Player
    DisplayName REG_SZ  Windows Media Player 10
    UninstallString     REG_SZ  "C:\Program Files\Windows Media Player\Setup_wm.
exe" /Uninstall
    DisplayIcon REG_SZ  C:\Program Files\Windows Media Player\wmplayer.exe
    ParentKeyName       REG_SZ  OperatingSystem
    ParentDisplayName   REG_SZ  Windows Updates

C:\>

Esse comando de consulta reg "bem-sucedido" define ERRORLEVEL como 0, ou seja, sem erro.

C:\>echo %errorlevel%
0

Se a chave não existisse, Eu procuro o Windows Media Player (observe o extra r)

C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Unin
stall\Windows Media Playerr"

Error:  The system was unable to find the specified registry key or value

C:\>echo %errorlevel%
1

C:\>

Quando% errorlevel% é > = 1, significa erro.

Então você pode testar se% errorlevel% == 0 Você pode testar SE NÃO% errorlevel% == 0 Você pode usar um ELSE

A outra sintaxe para testar ERRORLEVEL, não faça se errorlevel 0 (bobo) 'cos que pergunta se o valor é > = 0. Você diz IF ERRORLEVEL 1 (ou seja, se o valor for > = 1), ou IF NOT ERRORLEVEL 1 (ou seja, se o valor não for > = 1 ou seja, se o valor for 0 ou menor - e duvido que possa ser menor ). Ou você usa o% errorlevel%.

    
por 25.04.2012 / 03:43
1

Como alternativa ao registro, se você quiser verificar se está instalado, wmic pode fazer isso. Os comandos para verificar programas instalados normalmente demoram um pouco para serem executados, no entanto.

wmic product where "name like 'WhateverAccessRuntimeIsCalled'" get version

Para verificar o que é realmente chamado (você precisa do nome exato) e a versão correta, instale-o em seu próprio computador. Então, no seu próprio computador:

wmic product get name,version>programlist.txt && notepad.exe programlist.txt && del programlist.txt

Você pode então, no arquivo de lote, executar o comando de consulta:

setlocal EnableDelayedExpansion

for /f "skip=1 tokens=1 usebackq delims=." %%a in ('wmic product where "name like 'WhateverAccessRuntimeIsCalled'" get version') do (
    if /i "!_versionstring!" LSS "%%a" (
        set _versionstring=%%a
    )
)

if /i "%_versionstring%" LSS "WhateverTheMajorVersionNumberShouldBe" (
    echo It's not installed
) else (
    echo It is installed
)

O Office 2010 tem um número de versão principal (o primeiro número, separado por pontos) de 14. É claro que, se o nome do programa tiver "2010", não será necessário verificar o número da versão. Se o programa não existir, %_versionstring% estará vazio.

Verificar o registro é definitivamente mais rápido, mas eu diria que essa é a maneira "correta" de verificar se um programa baseado em MSI está instalado.

    
por 25.04.2012 / 18:13
1

Para simplesmente verificar se o Access Runtime 2010 está instalado ou não, eu uso esta linha

REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Office14.AccessRT" /v DisplayName

e como mencionado antes, você pode pegar o% errorlevel% para mais instruções

Por exemplo, um script de logon que eu escrevi:

@echo off

:: test whether your PC has Access or Access Runtime only if you are in the list 

find/i "%COMPUTERNAME%" \someserver\folder\list.txt >nul
 if %errorlevel%==1 goto end

:: set some variables false because batch has no logical OR
set accessTest=False
set accessExeTest=False

if exist "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" ( 
  set accessExeTest=x86 )

if exist "C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE" (
  set accessExeTest=x86_64 )

if exist "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office\Microsoft Access 2010.lnk" (
    set accessTest=True
  )

REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Office14.AccessRT" /v DisplayName
if %errorlevel%==0 (
    set accessTest=True
  )

:: execute only if a start menu entry or the registry key is found
if %accessTest%==True (

  :: import registry key to flag the DB as trusted
  reg import \someserver\public\ACCESS\allowAccess.reg

  :: choose from where to start access
  if %accessExeTest%==x86 (
    start "" "C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" \someserver\public\ACCESS\someDB.accdb /runtime  /nostartup
  ) else if %accessExeTest%==x86_64 (
    start "" "C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE" \someserver\public\ACCESS\someDB.accdb /runtime  /nostartup
  )
:: log the ones without any form of MS Access
else (
  echo %COMPUTERNAME%>>\someserver\HWINFO\access.log )
)

:end

você também pode verificar a localização do MSACCESS.EXE com

REG QUERY HKLM\SOFTWARE\Classes\Access.Application.14\shell\Open\command /ve

e pesquise as informações relevantes. mas notei que nem sempre é confiável. Às vezes, o * .exe está lá, mas não funciona.

    
por 07.03.2016 / 11:37