Как проверить наличие исполняемого файла и запустить установщик, если приложение не установлено?

Я системный администратор серверной / клиентской среды, в которой нет SCCM, и я хочу проверить, есть ли у компьютеров в моей организации имя файла, используя пакетный файл.

Я хочу, чтобы сценарий проверял, находится ли файл egui.exe в одном из этих каталогов:

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

Если файл СУЩЕСТВУЕТ, то скрипт должен ничего не делать.
Если файл НЕТ СУЩЕСТВУЕТ, то он должен начать установку Конечная точка Eset в Тихий режим с моего сервера:

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), она должна заставить ее установить И заменить текущую версию?

Бьюсь об заклад, если вы прочитаете файл справки для команды IF, вы увидите, каков правильный синтаксис для использования ELSE.

Squashman 11.04.2018 14:41

Ну не нахожу. Кроме того, не могу найти, как заставить его ничего не делать, если файл существует.

StackBuck 11.04.2018 15:20

@StackBuck, нетрудно найти справку по конкретной команде, открыть командную строку, cmd.exe, в окне набрать command /? и нажать клавишу ввода. В этом случае вы должны ввести if /? для получения информации о команде If.

Compo 11.04.2018 15:42

ОК. Как заставить скрипт «ничего не делать», если файл существует?

StackBuck 11.04.2018 15:48

Почему бы не использовать IF NOT EXIST? stackoverflow.com/questions/6780553/…

Adam Leinss 11.04.2018 15:50

Спасибо, Адам! Пожалуйста, подумайте, сделайте это как ответ, поэтому я приму и проголосую!

StackBuck 11.04.2018 15:51

@StackBuck, вы серьезно не можете увидеть пример синтаксиса в файле справки для команды IF. Это именно то, что вам нужно.

Squashman 11.04.2018 15:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
3 350
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я полагаю, вы убедились, что рассматриваемый MSI не решает эту «проблему» самостоятельно? Может быть, у него есть необходимая логика для очистки встроенных в него старых версий, чтобы вам не нужно было выполнять какие-либо проверки предварительных условий?

Я вижу, что вы получили пакетный ответ (IF NOT EXIST), но я хочу добавить, что вы можете решить эту проблему, используя устаревшие активные сценарии (VBScript, Javascript - я вижу, вы можете быть человеком Javascript) или более современные сценарии Powershell (которые я не используйте много).

Можем ли мы спросить, как вы запускаете установку? Через скрипт входа в систему, запланированные задачи, AD или какой-то другой механизм?

Я немного разбираюсь в сценариях Powershell, но по вашему вопросу я планирую сделать это через сценарий входа в систему.

StackBuck 11.04.2018 15:59

Хорошо, Powershell - это не мое, но вот хороший источник: github.com/heaths/psmsi (вероятно, вам известен). А если вы еще этого не сделали, возможно, просто запустите установку прямо в системе с уже существующим файлом и посмотрите, что произойдет. Вероятно, вы уже это сделали.

Stein Åsmul 11.04.2018 16:06
Ответ принят как подходящий

Откройте окно командной строки и запустите 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, чтобы узнать причину всех этих условий ЕСЛИ.

Но я полагаю, что было бы лучше проверить наличие egui.exe, запросив ключ реестра регистрация приложения этого приложения, установленного с помощью пакета установщика Microsoft.

@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.

REG завершается со значением 1, если указанный раздел реестра не существует, и со значением 0 при успешном запросе этого раздела реестра.

if not errorlevel 1 означает, что код выхода ранее выполненной команды / приложения - не больше или равно1, что означает ниже чем1, что означает, что почти для всех команд и приложений это равный0.

У меня не установлен пакет ESET Безопасность, поэтому я не знаю, зарегистрирован ли egui.exe (или любой другой исполняемый файл из этого пакета) в соответствии с рекомендациями Microsoft по регистрации приложений Windows.

Чтобы понять все используемые команды и то, как они работают, откройте окно командной строки, выполните следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • goto /?
  • if /?
  • reg /?
  • reg query /?
  • rem /?

Другие вопросы по теме