如果未安装应用程序,如何检查可执行文件的存在并运行安装程序?

时间:2018-04-11 12:02:06

标签: batch-file windows-installer

我是没有SCCM的服务器/客户端环境的系统管理员,我想检查组织中的计算机是否有使用批处理文件的文件名。

我希望脚本检查文件egui.exe是否在以下目录之一:

Program Files\ESET\ESET Security\
Program Files (86)\ESET\ESET Security\

如果文件为EXIST,那么脚本什么都不做 如果文件 EXIST,那么它应该从我的服务器以安静模式开始 Eset Endpoint 安装:

msiexec /i myserver\eea_nt64_enu.msi /qb 

我写了一些东西,但我不确定它是否正确和完整:

If exist "C:\program files\ESET\ESET Security\egui.exe" echo ?
else 
call msiexec /i myserver\eea_nt64_enu.msi /qb

同样,如果文件存在,我不希望脚本加载安装。 如果该文件夹中存在可执行文件,则批处理文件应该不执行任何操作。

如何检查程序文件程序文件(x86)中是否存在可执行文件?

如何检查每个人的版本?

如果AntiVirus的版本是旧的(假设版本为4),那么应该强制它安装AND覆盖当前版本吗?

2 个答案:

答案 0 :(得分:1)

我假设您已经确认有问题的MSI没有解决这个"问题"在其自己的?它可能有必要的逻辑来清理内置的旧版本,因此您不需要检查前置条件?

我看到你已经得到了批量答案(IF NOT EXIST),但我想补充一点,你可以使用遗留的,有效的脚本(VBScriptJavascript来解决这个问题 - 我看到了你可能是一个Javascript man),或更现代的Powershell脚本(我不太习惯)。

我们可以问你如何调用安装吗?通过登录脚本,计划任务,AD或其他一些机制?

答案 1 :(得分:1)

打开命令提示符窗口并运行if /?goto /?以了解以下批处理文件:

@echo off

rem This first file existence check works on 32-bit and
rem 64-bit Windows in 32-bit and 64-bit environment.
if exist "%ProgramFiles%\ESET\ESET Security\egui.exe" goto :EOF

rem On 64-bit Windows run also a file existence check for 32-bit version
rem of application in standard program files folder for x86 applications.
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\ESET\ESET Security\egui.exe" goto :EOF

rem If this batch file is executed by 32-bit cmd.exe on 64-bit Windows
rem there is still not checked if 64-bit version of application exists
rem in standard program files folder for x64 applications.
if not "%ProgramW6432%" == "" if exist "%ProgramW6432%\ESET\ESET Security\egui.exe" goto :EOF

rem Other commands to install the application depending on Windows architecture.

阅读Microsoft文章WOW64 Implementation Details,了解所有 IF 条件的原因。

但我想通过查询使用Microsoft Installer程序包安装的此应用程序的application registration注册表项来检查egui.exe的存在会更好。

@echo off
%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\egui.exe" >nul 2>&1
if not errorlevel 1 goto :EOF

rem Other commands to install the application depending on Windows architecture.
如果指定的注册表项不存在且<{1}}成功查询此注册表项,则

REG 以值1退出。

0表示先前执行的命令/应用程序的退出代码不大于或等于 if not errorlevel 1,这意味着低于 {{1}这意味着几乎所有命令和应用程序都相等 1

我没有安装 ESET Security 软件包,因此不知道是否根据Microsoft指南注册了1(或此软件包中的任何其他可执行文件)用于Windows应用程序注册。

要了解所有使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • 0
  • egui.exe
  • echo /?
  • goto /?
  • if /?
  • reg /?