Назад | Перейти на главную страницу

Установите .msi из скрипта, определите, когда установка будет завершена

Пытаюсь сделать скрипт установки. Я хочу установить файл .msi Python, а затем установить другие вещи после установки Python. я уже видите, как выполнить установку из командной строки. Тем не мение, msiexec сразу возвращается, даже если установка все еще продолжается. Как мне определить завершение установки msi из пакетного сценария?

Не знаю, как Python обрабатывает передачу команд в Windows / DOS, но с помощью простого командного файла и start /wait команда, командный файл останавливается и ждет, пока MSI не будет завершен, прежде чем перейти к следующему шагу.

Например, чтобы установить основное приложение, за которым следует патч только после его завершения, а затем окончательная программа после его завершения, поместите эти строки в файл .cmd:

start /wait msiexec /i O12Conv.msi /qb
start /wait msiexec /p O12Convsp1-en-us.msp /qb
start /wait msiexec /i mpsetupedp.msi

Это сложно и ненадежно, но есть способы отслеживать наличие определенного процесса в списке процессов. Вы записываете свой цикл в NOOP, ожидая, что этого процесса больше не будет, а затем выполняете следующие шаги. Есть несколько способов справиться с этим.

Инструмент SysInternals pslist покажет процессы, хотя анализ вывода может быть непростым. PowerShell может получить доступ к .NET API для мониторинга процессов через get-process командлет.

Эти методы просто следят за существованием процесса, они не могут проверить коды выхода и, следовательно, не могут знать, завершился ли процесс нормально или в состоянии ошибки. Для этого вам нужно будет обработать любые журналы MSI, которые вы указали, или, возможно, покопаться в журнале Windows Even Log для событий ошибок.

При успешной установке будет возвращен любой из 3 кодов: 0,1641,3010 в зависимости от варианта перезагрузки. Пожалуйста, попробуйте изменить свой сценарий так, чтобы он, в свою очередь, выдавал коды.