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


1

使用批处理文件时,是否有一个命令可用于检查当前是否安装了Access 2010 Runtime,如果没有,则调用它的安装?

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

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

Answers:


2

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

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的程序的“正确”方法。


wmic是个好主意。但是在Windows XP上默认不提供AFAIK wmic。
罗伯特

@Robert不是吗?好吧,然后废弃这个想法。检查注册表,也许卸载密钥,将是那样的方式。
Bob

我在XP上检查了WMIC的可用性,我不得不说我有些错误。WMIC附带SP2,但只有在XP Professional版本才会安装。因此,WMIC仅在XP Home上不可用。
罗伯特

1

我很惊讶你没找到那个命令
IF NOT ACCESS2000RunTimeInstallation RUN ACCESS2000RuntimeInstallation
;-)

但无论如何,

这是原则。

我有一个名为aa的文件和一个名为c:\ windows的目录。我没有名为ab的文件,我没有名为c:\ windows1的目录

我们可以说

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

在下面的示例中,您可以将“echo here”替换为程序的路径

现在找出访问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查询命令将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的另一种语法,如果errorlevel 0(愚蠢)'cos要求值> = 0,则不要这样做。你说IF ERRORLEVEL 1(即如果值> = 1),或IF NOT ERRORLEVEL 1(即如果值不是> = 1,即如果值为0或更小 - 我怀疑它可能会更少)。或者您使用%errorlevel%。


谢谢你的输入。我理解该IF EXIST命令的工作原理并使用它来检查其他一些文件。如果我不知道安装程序放置的位置或Access 2010 Runtime 独有的文件,该怎么办?
CharlieRB

1
您也可以查看注册表,查看我的更新。如果您不知道它所创建的文件或注册表项,那么您可以运行卸载程序,监视安装或安装之前和之后,并查看它放在那里的文件或注册表项,并检查一些。那么你可以肯定它是独一无二的!或者,您可以在添加/删除程序中看到它所做的注册表项。这可能是独一无二的。
barlop

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存在,但它不起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.