Можно ли безопасно удалить ScheduleReboot из MSI?
Я работаю над проектом, используя схему проекта Basic MSI. В этом проекте есть настраиваемое действие под названием "ScheduleReboot". Пользователь должен ответить на это приглашение до завершения установки. Если установка не имеет пользовательского интерфейса, система автоматически перезагружается в конце. У меня проблема с установщиком автоматически перезагружается
У меня вопрос: можно ли безопасно удалить ScheduleReboot, чтобы программа установки не перезапускалась во время установки без вывода сообщений? Каковы последствия этого? Могу ли я добавить его обратно?
1 ответ
ОБНОВЛЕНИЕ: Обратите внимание, что очень часто нежелательные требования перезагрузки могут быть вызваны:
- Установки службы, которые должным образом не останавливают существующую установку службы, прежде чем пытаться перезаписать двоичные файлы более поздней версией. Чтобы остановить эту проблему, добавьте остановку службы в последовательность установки.
- Проблема перезаписи службы и все другие проблемы с использованием файлов, которые вызывают запросы на перезагрузку, могут усугубляться, если вы используете ненужную принудительную перезапись файлов, используя
REINSTALLMODE=amus
или похожие. Это попытается принудительно перезаписать файлы одной и той же версии - и это может увеличить количество запросов на перезагрузку. - Вы не реализуете меры в своем приложении, чтобы воспользоваться преимуществом функции RestartManager в Windows: установщик Windows - избегайте использования FileinUse при установке пакета. По сути, эта функция позволяет закрывать и повторно открывать приложения предсказуемым образом, устраняя необходимость перезагрузки.
ScheduleReboot, стандартное действие: ScheduleReboot
это не пользовательское действие, а стандартное действие. Это означает, что он встроен в сам установщик Windows, а не выполнен Installshield
или вы сами, или кто бы ни построил установку. Мне не нравится это действие ScheduleReboot, потому что, если вы поставите условие неправильно, оно действительно может вызвать нежелательные перезагрузки, как я объясняю здесь: перезагрузка при установке, не перезагружаться при удалении (рекомендуется прочитать).
Документация MSI SDK: документация для этого стандартного действия находится здесь: ScheduleReboot Action
, Как вы увидите, решающий раздел таков: If the installer determines that a restart is necessary it automatically prompts the user to restart at the end of the installation, whether or not there are any ForceReboot or ScheduleReboot actions in the sequence. For example, the installer automatically prompts for a restart if it needs to replace any files that are in use during installation.
"
Вывод: другими словами вы можете безопасно удалить ScheduleReboot
стандартное действие из вашей настройки, но установка может перезагрузиться даже без нее. Однако, как я ответил на другой ваш вопрос, вы можете установить REBOOT=ReallySuppress
установите флажок в командной строке, чтобы предотвратить перезагрузку ПК всеми " обычными механизмами перезагрузки". Единственная другая вещь, о которой я могу подумать, - это перезагрузка ПК, это настраиваемые действия, предназначенные для этого - в общем, самостоятельно (если вы не изменяете чей-либо пакет, и там нет неизвестных настраиваемых действий).
Я думаю, что есть несколько неясных случаев, когда ОС может вызвать принудительную перезагрузку, но я не могу вспомнить, какие случаи были бы в этой точке. Они должны быть не важны для обычного развертывания - просто помните о проблеме. И по этой теме (я ссылаюсь на это, потому что хочу сказать, что не буду использовать ни один из сумасшедших методов, упомянутых здесь).
msiexec.exe: командная строка для подавления обычных запросов перезагрузки:
msiexec.exe /i "setup.msi" /QN /L*V "msilog.log" REBOOT=ReallySuppress
Обратите внимание, что только первая буква REBOOT
, свойство актуально, так что вы также можете написать REBOOT=R
,