1

При использовании командного файла, есть ли команда, которую я могу использовать, чтобы проверить, установлен ли Access 2010 Runtime в настоящий момент, и если нет, то вызвать его установку?

Это будет использоваться как в Windows 7, так и в Windows XP.

Редактировать: ищет способ проверить установку программы, не зная, куда помещаются файлы при установке Access Runtime.

4 ответа4

2

В качестве альтернативы реестру, если вы хотите проверить, установлен ли он, wmic может сделать это. Однако для проверки установленных программ обычно требуется немного времени.

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

Чтобы проверить, как он на самом деле называется (вам нужно точное имя) и правильную версию, установите его на свой компьютер. Затем на вашем компьютере:

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

Затем вы можете в командном файле выполнить команду запроса:

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
)

Office 2010 имеет основной номер версии (первый номер, разделенный точками) 14. Конечно, если имя программы содержит "2010", нет необходимости проверять номер версии. Если программа не существует, %_versionstring% будет пустым.

Проверка реестра определенно быстрее, но я бы сказал, что это «правильный» способ проверить, установлена ли программа на основе MSI.

2

Вы можете прочитать информацию из реестра:

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

Эта команда читает MSAccess.Путь к EXE из реестра. Вам просто нужно сохранить его в переменную, а затем удалить мусор вокруг него. Это можно сделать с помощью команды "for".

1

Чтобы просто проверить, установлен ли Access Runtime 2010 или нет, я использую эту строку

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

и, как упоминалось ранее, вы можете поймать% errorlevel% для дальнейших инструкций

Например, скрипт входа в систему, который я написал:

@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

Вы также можете проверить местоположение MSACCESS.EXE с

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

и искать соответствующую информацию. но я заметил, что это не всегда надежно. Иногда * .exe есть, но он не работает.

1

Я удивлен, что вы не нашли эту команду
ЕСЛИ НЕ ACCESS2000RunTimeInstallation RUN ACCESS2000RuntimeInstallation
;-)

Но так или иначе,

Вот принцип.

У меня есть файл с именем aa и каталог с именем c:\windows. У меня нет файла с именем ab, и у меня нет каталога с именем c:\windows1

Можно сказать

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

В приведенных ниже примерах вы можете заменить "echo here" на путь к программе

Теперь выясните, какие файлы установщик Access 2000 помещает на жесткий диск, и выберите уникальный, или каталог, который он создает, и используйте его для выражения 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:\>

Обновить-

Вы также можете проверить реестр

Как пример, какой бы ни была программа, в одном месте вы можете увидеть это в «Установка и удаление программ». Вот место в реестре, где это хранится. Вы можете запустить эту команду и прокрутить ее, чтобы получить представление о команде

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

Одной из перечисленных программ является Windows Media Player, который у вас тоже будет

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:\>

Эта "успешная" команда reg query устанавливает ERRORLEVEL в 0, что означает отсутствие ошибки.

C:\>echo %errorlevel%
0

Если ключ не существует, например, я ищу Windows Media Playerr (обратите внимание на дополнительный г)

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:\>

Когда% errorlevel% равен> = 1, это означает ошибку.

Таким образом, вы можете проверить IF%% errorlevel% == 0 Вы можете проверить IF NOT% errorlevel% == 0 Вы можете использовать ELSE

Другой синтаксис для проверки ERRORLEVEL, не делать, если errorlevel 0 (глупый), потому что запрашивает значение> = 0. Вы говорите, ЕСЛИ ОШИБКА 1 (то есть, если значение> = 1), или ЕСЛИ НЕ ОШИБКА 1 (т.е., если значение не> = 1, т.е. если значение равно 0 или меньше - и я сомневаюсь, что оно может быть когда-либо меньше). Или вы используете% errorlevel%.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .