Как предотвратить неоднозначный сбой vc_redist.x ##. Exe (VS2017) из-за ожидающей перезагрузки? - PullRequest
0 голосов
/ 11 октября 2018

TL; DR Каков разумный способ автоматизировать вызов VS 2017 vc_redist при вызове в цепочке из нескольких инсталляторов?


Visual C ++Распространяемый установщик , который MS предоставляет для VS 15.x (VS 2017), а именно Оба (14.15.26706 - VS 15.8.4)):

  • vc_redist.x86.exe
  • vc_redist.x64.exe

В рамках нашей полной установки продукта я должен запустить несколько установщиков vcredist (также более старых версий) в режиме без вывода сообщений.

Проблема теперь в том, что эти установщики откажутся от установки, если перезагрузка ожидает (например, "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" - PendingFileRenameOperations).

При вызове этих установщиков с vc_redist /q они будут даже вызывает немедленную перезагрузку системы.Это можно исправить, вызвав их с /q /norestart, однако:

При вызове vc_redist /q /norestart, и если перезагрузка ожидает до для этого установщика, он вернет код выхода MSI 3010, который указывает, что требуется перезагрузка.

Однако , AFAIK, этот код выхода также указывает, что для выполнения этой настройки требуется перезагрузка.

Актуальный вопрос

Итак, я не могу различить , был ли успешен этот установщик, и просто требует перезагрузки в самом конце моей последовательности установки (я устанавливаю другие компоненты до и после) - или если установщик на самом деле отказался что-либо делать , и мне нужно было бы перезапустить систему и запустить этот установщик снова!

Как я могу вызвать этот vc_redist вцепочка различных сторонних инсталляторов и

  • в идеале требуется только одна перезагрузка в самом конце
  • , по крайней мере, определить, успешно ли он установлен.

Некоторые дополнительные сведения, fwiw:

Не уверен, что эти helkp с вопросом, но ради полноты.

  • Графический интерфейс установщика четко указывает, что происходит: (извините, немецкий Windows)

Popup Box

"Никаких действий не предпринималось, поскольку требуется перезагрузка системы."

Summary / Close / Restart

  • Это встроенный установщик InnoSetup для нашего «набора продуктов», который будет использоваться клиентами, порядок установкиработает следующим образом:

    1. Запуск MSVC 2005 (VC8) 32-битного vcredist
    2. Запуск MSVC 2010 (VC10) 32-битного vcredist
    3. Запуск MSVC 2017 (VC141) 64bit vcredist
    4. Запуск MSVC 2017 (VC141) 32-битный vcredist
    5. Запуск нескольких сторонних установщиков зависимостей / библиотек
    6. Установка реальных файлов приложения (через InnoSetup)
    7. Перезагрузите компьютер (спросите), если какой-либо установщик указал на необходимость перезагрузки.

Как видно изэта последовательность, перезагрузка после каждого vcredist, будет безумной, и, к счастью, пока только повторный выпуск 2017 года демонстрирует это прискорбное поведение до сих пор.с перезагрузкой, уже ожидающей на «шаге 0», и оба установщика VC2005 и VC2010 работают очень хорошо (как проверено в ходе их графического интерфейса), даже если перезагрузка является ожидающей до этого.Это установщики VC2017, которые отказываются что-либо делать, если ожидается перезагрузка.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Строго говоря, ошибка 3010 - результат успеха.Это означает, что установка завершена, но требует перезагрузки.Я ничего не знаю о том, что это означает, что установка не началась вообще.Типичное «не будет установлено, если перезагрузка ожидает» - это результат использования условия запуска, основанного на свойстве MsiSystemRebootPending.Сбои из-за этого условия запуска не возвращают результат 3010 - они обычно возвращают ошибку 1602 как своего рода ошибку «отмены пользователем».

0 голосов
/ 11 октября 2018

Пакеты MSU : После декомпиляции vc_redist.x64.exe, который представляет собой пакет WiX, с помощью этой команды:

dark.exe -x Extract vc_redist.x64.exe

Я обнаружил, что пакет устанавливает: Обновление для Universal C Runtime в Windows - KB2999226 .Этот компонент состоит из файлов Центра обновления Windows (*.msu - используется Центром обновления Windows), а не только файлов MSI. Я подозреваю, что они могут быть спроектированы так, чтобы требовать перезагрузки, прежде чем разрешить установку, но у меня нет доказательств .

Предложение :Запустите проверку, чтобы убедиться, что KB2999226 установлен.Как это сделать?Я не знаю звонка Win32, но ребята из WiX, вероятно, будут знать. Вот некоторые другие предложения .


Фактические файлы Центра обновления Windows (со временем эти имена файлов могут измениться, когда будут выпущены новые версии этого установщика с именем файла без версии - vc_redist.x64.exe -):

  • Windows6.0-KB2999226-x64.msu
  • Windows6.1-KB2999226-x64.msu
  • Windows8.1-KB2999226-x64.msu
  • Windows8-RT-KB2999226-x64.msu

Другими словами для Vista, Windows 7, Windows 8 и др.Различные серверные ОС.Windows 10 имеет этот встроенный компонент.

Корпоративное развертывание : в корпоративной среде я бы развернул эти *.msuфайлы доступны через механизм распространения - какой бы он ни был - например, SCCM - перед установкой пакета vc_redist.x64.exe.

Это должно обеспечить лучший контроль над процессом распространения при получении сообщений об ошибках.прямо из самих MSU.

Честно говоря, это компоненты ядра-SOE, на мой взгляд.Я не знаю, почему Microsoft хранит эти среды выполнения вне основной установки ОС.Они имеют решающее значение для большинства программ.


Описание подхода декомпиляции с использованием набора инструментов dark.exe набора инструментов WiX можно найти здесь: Как я могусравнить содержимое двух (или более) файлов MSI?

...