Лучший подход для установки предпосылки на клиентской машине с использованием msi

У меня есть msi и вы хотите проверить, установлено ли время выполнения vsto на целевой машине, я использовал условие запуска через VS2008 в моем msi, но только перенаправлял пользователя на веб-сайт поставщика. Я просто хочу установить необходимое условие, если оно не установлено на машине, и хотите, чтобы предварительное условие было установлено во время работы msi. Его можно суммировать как:

Когда msi запущен:

  • Он должен проверить, установлено ли предварительное условие, если да, то возобновите установку.
  • Если нет, сначала установите предварительное условие, а затем возобновите установку msi.

Я искал и нашел много решений, например, один исполняемый пакет, vb script в пользовательском действии, но требование не отправлять ничего с установщиком, ни EXE не является приемлемым: (

У меня установлен orca, но у меня нет большого опыта в настройке msi с помощью Orca

Ваша помощь приветствуется. Спасибо заранее...

Ответ 1

Поскольку загрузочный носитель EXE неприемлем, существует только одно решение:

  • сохраните предварительные установки в Бинарная таблица вашего MSI
  • создайте пользовательские действия, которые извлекают их из этой таблицы и запускают их
  • планируйте их в InstallUISequence, например, прямо перед диалоговым окном Progress
  • используйте поиск, чтобы определить, установлены ли предварительные условия или нет.
  • условия ваших пользовательских действий с результатами поиска

В принципе, вам нужно запустить их во время пользовательского интерфейса установки. Он может не работать, если пользовательские действия выполняются во время InstallExecuteSequence.

Это не поддерживается Visual Studio, но некоторые средства разработки коммерческих настроек имеют прямую поддержку для этого. Если вы хотите получить бесплатное решение, вы можете использовать WiX, но вам нужно будет самостоятельно написать свои собственные действия.

Ответ 2

Вы не можете запускать несколько пакетов .msi одновременно, поэтому, если pre-req является .msi-based, он не будет работать. (Помните, что многие пакеты на основе .msi завернуты в .exes.)

Ответ 3

WIX является одним из самых мощных (и бесплатных) инструментов для создания установщиков Windows. Там есть сквозная статья, которую я написал некоторое время назад в Создание локализованного установщика Windows и загрузчика, что может помочь.

Вы можете обеспечить предварительные условия, например, определяя условия в файле WIX.

<Condition Message="[ProductName] requires the Microsoft .NET Framework 4 Client Profile">
    Installed Or NETFRAMEWORK40CLIENT
</Condition>

Однако для установки необходимого условия вам понадобится ускоритель (EXE).

В приведенной выше статье показано, как использовать dotNetInstaller для создания управляемых EXE, которые проверяют и устанавливают эти предварительные требования перед выполнением встроенного MSI на конец. Разумеется, вы также можете просто объединить нагрузку MSI вместе, это действительно гибко.

Я считаю, что WIX также имеет инструмент под названием Burn, который должен был быть выпущен в версии 3.5, я его не использовал, но он также поддерживает функции загрузки.

Orca на самом деле не используется для компиляции MSI, она просто полезна для отладки и копания внутри.

Ответ 4

Как вы уже знаете, файл setup.exe, созданный для Visual Studio, может установить множество предварительных условий. Однако в вашем вопросе указывается, что вы должны отправить только файл MSI, поэтому setup.exe не поможет.

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

Если вы уже устанавливаете .NET-код, решение еще проще: добавьте класс установщика проекта в существующий код, а затем установите настраиваемое действие для запуска класса установщика. Обратите внимание, однако, что этот подход не будет работать, если предварительным условием, которое вы хотите установить, является сама среда выполнения .NET.