2008-09-26 15 views
1

У меня есть пакет MSI для установщика Windows, который устанавливает драйверы, которые иногда требуют перезагрузки до их обновления; драйверы устанавливаются путем отложенного пользовательского действия после WriteRegistryValues. Когда требуется перезагрузка, происходит откат, и пользователю предлагается перезагрузить компьютер и снова запустить установку.Установщик Windows - обновление после перезагрузки

В процедуре InstallExecuteSequence действие RemoveExistingProducts находится между InstallValidate и InstallInitialize, поэтому, когда обновление сообщает о необходимости перезагрузки, предыдущий пакет был удален. Поэтому, когда требуется перезагрузка, после отката и сообщения об ошибке «перезагрузка и повторное выполнение этого» наше программное обеспечение больше не установлено. Если пользователь перезагружается и повторяет установку, все работает нормально.

Мне нужно автоматизировать перезагрузку и возобновление установки, так что пользователю не нужно на самом деле сделать что-нибудь (кроме согласия на перезапуск конечно.)

Команда, написанный в ключ RunOnce реестра, необходимо может работать установка снова после перезагрузки, но я думаю, что будет сложно установить ForceReboot на то, что происходит в отложенном пользовательском действии, которое устанавливает драйвер. Также, может быть, сложно решить, что делать в возобновленной установке.

Рекомендации по лучшим практикам или указателям на потенциальные проблемы будут очень желанными.

ответ

2

RemoveExistingProducts before InstallInitialize или после InstallFinalize не помещает действие в сценарий аудита нового продукта, так как вы сказали, что старый продукт удален до завершения обновления.

Таким образом, вы можете попытаться выполнить выполнение RemoveExisitngProducts между InstallInitialize и InstallFinalize, таким образом, он находится в удалении в скриптовой части аудита, поэтому он будет отслеживать, перезагружать и возобновлять.

взглянуть на свойства системы перезагрузки here