Задача
У меня есть MSI, который создает и запускает службу Windows во время установки, останавливает и удаляет службу во время удаления. Это прекрасно работает при установке и удалении самостоятельно, но при обновлении отображается диалоговое окно Используемые файлы (только в Vista и более поздних версиях из-за нового Restart Manager ), указывая, что Сервис находится в использовании.
Фон
Диалоговое окно Используемые файлы отображается во время последовательности InstallExecute с помощью пользовательского действия InstallValidate , которое запланировано непосредственно перед RemoveExistingProducts настраиваемое действие; это означает, что предыдущая версия еще не была удалена, поэтому диалоговое окно Используемые файлы должно отображаться .
В документации MSDN указано, что действие RemoveExistingProducts должно быть запланировано после действия InstallValidate , и в настоящее время у меня есть действия RemoveExistingProducts , запланированные сразу после InstallValidate action.
Потенциальное решение
Я бы хотел перенести пользовательское действие RemoveExistingProducts непосредственно перед пользовательским действием InstallValidate , чтобы предыдущая установка имела возможность остановить и удалить службу до Файлы в использовании отображается диалоговое окно. Я попытался переназначить действия, и, похоже, он работает правильно, без побочных эффектов (хотя в журнале все еще указывается, что действие InstallValidate выполняется до действия RemoveExistingProducts ), но я ' Я не решаюсь использовать это решение, поскольку оно нарушает документацию MSDN, и могут возникнуть нежелательные последствия, которых я просто пока не вижу.
Кто-нибудь пробовал это? Единственная альтернатива, о которой я могу подумать, - это чтобы новая установка остановила службу старой установки, но это нежелательно, поскольку для установки требуется информация обо всех старых установках, которые она может обновить (остановка этой конкретной службы может потребовать больше чем просто звонок в Service Manager, чтобы остановить его).