Запуск пакетного скрипта с двумя командами msiexec приводит к завершению скрипта сразу после завершения первой команды
Я пытаюсь запустить пакетный скрипт из задания jenkins, в котором есть две команды msiexec: одна для удаления, а другая для установки.
Этот скрипт на github, поэтому Дженкинс Джокинс клонирует репозиторий и затем запускает скрипт
Задание Jenkins запускает выполнение второй команды msiexec (установка), но оно немедленно завершается. Если я открываю консоль задания, я вижу сообщение "Обработка утечек файловых дескрипторов". и статус работы: успех
Если я запускаю тот же скрипт через cmd без jenkins, он работает нормально.
setlocal enabledelayedexpansion
IF EXIST "directory path" (
msiexec /uninstall {Product ID} /qb
)
pushd \\shared drive
IF EXIST "directory path" (
msiexec /i "path to exefile" /qb
popd
exit 0
)
ELSE (
ECHO Setup Not Found in current
exit 0
)
1 ответ
Ключевое слово ELSE должно быть в той же строке, что и )
ИСТИННОЙ ветви состояния IF отделена от )
космическим символом. ELSE в отдельной строке интерпретируется как имя консольного приложения для запуска.
if exist "directory path" (
%SystemRoot%\System32\msiexec.exe /uninstall {Product ID} /qb
)
pushd "\\ComputerName\ShareName\"
if exist "directory path" (
%SystemRoot%\System32\msiexec.exe /i "path to exefile" /qb
) else (
echo Setup not found in %CD%.
)
popd
exit /B 0
Подсказка: для отладки командного файла запустите его из окна командной строки, а не двойным щелчком по нему после удаления или комментирования всех строк, содержащих echo off
, И не используйте EXIT без /B
поскольку это всегда приводит к выходу из всего командного процесса, а не только к выходу только из обработки текущего пакетного файла. Отладка командного файла в окне командной строки становится сложной, если командный файл содержит EXIT без /B
и эта команда действительно выполняется при запуске пакетного файла, потому что сообщения об ошибках, выводимые во время выполнения пакетного файла, в этом случае не видны.