Можно ли безопасно удалить ScheduleReboot из MSI? - PullRequest
0 голосов
/ 31 октября 2018

Я работаю над проектом, используя схему проекта Basic MSI. В этом проекте есть настраиваемое действие под названием «ScheduleReboot». Пользователь должен ответить на это приглашение до завершения установки. Если установка не имеет пользовательского интерфейса, система автоматически перезагружается в конце. У меня проблема в том, что установщик автоматически перезагружается

У меня вопрос: можно ли безопасно удалить ScheduleReboot, чтобы программа установки не перезапускалась во время автоматической установки. Каковы последствия этого? Могу ли я добавить его обратно?

1 Ответ

0 голосов
/ 01 ноября 2018

ОБНОВЛЕНИЕ : Обратите внимание, что очень часто нежелательные требования к перезагрузке могут быть вызваны:

  1. Установки службы , которые не могут правильно остановить существующую установку службы, прежде чем пытаться перезаписать двоичные файлы более поздней версией. Чтобы остановить эту проблему, добавьте остановку службы в последовательность установки.
  2. Проблема перезаписи службы и все другие проблемы с использованием файлов, которые вызывают запросы на перезагрузку, могут усугубляться, если вы используете ненужную принудительную перезапись файлов, используя REINSTALLMODE=amus или подобное. Это попытается принудительно перезаписать файлы той же версии - и это может увеличить количество запросов перезагрузки.
  3. В вашем приложении не реализованы меры, позволяющие воспользоваться функцией RestartManager Windows: Диалоговое окно Windows Installer-Avoid 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.

...