是否有批处理命令可以检查 Access 2010 Runtime 安装?

是否有批处理命令可以检查 Access 2010 Runtime 安装?

使用批处理文件时,是否有命令可以用来检查 Access 2010 Runtime 当前是否已安装,如果尚未安装,则调用其安装?

这将在 Windows 7 和 Windows XP 上使用。

编辑:寻找一种方法来检查程序的安装,而不知道安装 Access Runtime 时文件放在哪里。

答案1

您可以从注册表中读取信息:

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

此命令从注册表中读取 MSAccess.EXE 路径。您只需将其保存到变量中,然后删除其周围的垃圾即可。这可以使用“for”命令来完成。

答案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 的程序是否安装的“正确”方法。

答案3

我很惊讶你没有找到该命令
IF NOT 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(注意多余的 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:\>

当 %errorlevel% >=1 时,表示错误。

因此,您可以测试 IF %errorlevel%==0,也可以测试 IF NOT %errorlevel%==0,还可以使用 ELSE

测试 ERRORLEVEL 的另一种语法是,不要执行 if errorlevel 0(愚蠢),因为它要求值 >=0。您可以说 IF ERRORLEVEL 1(即,如果值 >=1),或 IF NOT ERRORLEVEL 1(即,如果值不 >=1,即,如果值为 0 或更小 - 我怀疑它永远不会更小)。或者您使用 %errorlevel%。

答案4

为了简单地检查 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 在那里但它不起作用。

相关内容