Установщик Visual Studio, выполнение настраиваемого действия перед копированием файлов

Я использую обычный проект установки Visual Studio для развертывания службы. Мне нужно выполнить настраиваемое действие, до файлы будут скопированы программой установки. AFAIS все пользовательские действия (производные от установщика...) выполняются после копирования файлов (что очевидно, поскольку их нужно каким-то образом выполнить).

Фактическая проблема заключается в том, что установщик сам проверяет, какие файлы используются, и останавливает службу перед копированием (кстати, диалог установщика для остановки приложений говорит ерунду - но это другой вопрос). В принципе, это хорошая идея. Однако после установки конфигурация службы настроена на перезапуск службы, если она не запущена (эту работу выполняет диспетчер управления службами). Эта конфигурация является обязательной, ее нельзя изменить навсегда (только временно). Позже, во время установки обновления, это иногда сталкивается с процессом (обновления) установки. Поэтому в случае установки обновления я хочу изменить конфигурацию (старой) службы, чтобы не перезапустить или даже удалить (старую) службу до того, как файлы будут скопированы в целевую папку. В противном случае копирование файлов иногда завершается ошибкой, если файл все еще используется (поскольку старая служба снова работает (только что перезапущена диспетчером управления службами), как описано выше). Короче говоря, мне нужно выполнить некоторый код, прежде чем (новые) файлы будут скопированы установщиком.

Это связанный вопрос, но ответ не соответствует моему вопросу: into-the-target-directory-by-m">Создать резервную копию целевого каталога до того, как файлы будут скопированы в целевой каталог установщиком msi


person user2261015    schedule 23.10.2018    source источник
comment
Хороший. Этот вопрос был трижды отклонен без указания причины всего через несколько минут после того, как я его опубликовал.   -  person user2261015    schedule 24.10.2018


Ответы (1)


Фактический ответ выглядит следующим образом: это невозможно. У меня не было времени полностью переключиться на WIX или подобные альтернативы. Это не очень хорошее решение, но оно работает. Я решил проблему следующим образом:

  • Создайте новое приложение «MySetup.exe» (Forms, WPF или что-то еще)
  • MySetup.exe проверяет существующие установки служб по мере необходимости (см. подробности моего исходного вопроса) и удаляет службы. Таким образом, он выполняет "настраиваемое действие".
  • MySetup.exe включает в себя исходный файл MSI и запускает его после того, как будут выполнены предварительные условия.
  • Он проверяет результаты установки MSI для дальнейшей обработки ошибок.
  • Одним из преимуществ является то, что я могу легко добавить такие параметры, как имя файла журнала, к установке MSI.
person user2261015    schedule 24.10.2018