Как лучше использовать файлы MSI

Как вы, возможно, знаете, msiexec - это приложение командной строки, которое вы можете использовать для установки файла MSI. Как вы, возможно, знаете, вы можете запустить его в тихом или невидимом режиме.

Если установщик требует, чтобы пользователь отвечал на конкретные вопросы о том, какие части установить, есть ли какой-нибудь способ, которым я могу вставить в командную строку msiexec ряд опций для этого?

Я полагаю, что должен быть какой-то способ установки параметров по умолчанию для файла MSI, чтобы это произошло. Как создаются файлы MSI? Они разработаны с помощью инструментов от Microsoft? Могут ли они быть открыты и отредактированы?

3 ответа

Решение

Думайте о пользовательском интерфейсе с MSI как о дополнительном. Это означает, что ответы не требуются, так как разработчик имеет разумные значения по умолчанию, чтобы все не сломалось.

Мы распространяем наше программное обеспечение в формате MSI для корпоративных клиентов, я также предоставляю им документацию по основам Orca (orca.msi распространяется вместе с Windows Installer SDK) и по настройке некоторых полей, которые мы перечислили в Property стол для их установки. Например, серийный номер, регистрационные данные и несколько других настроек.

В ответ на оригинальный вопрос о параметрах командной строки msiexec просто запустите MSIEXEC /? чтобы установить свойства в командной строке, вы бы использовали что-то вроде

MSIEXEC /I test.msi SOMEPROPERTY="Some value" PROP2="something else"

MSI -файлы специально разработаны для поддержки автоматической установки в качестве встроенной функции - вы всегда можете пропустить графический интерфейс. Однако некоторые файлы MSI имеют недостатки дизайна, которые делают установку незавершенной в автоматическом режиме, что является серьезной ошибкой проектирования. Эта проблема описана здесь: удаление из панели управления отличается от удаления из MSI.


Настройка установок MSI

Когда дело доходит до установки MSI без вывода сообщений, вам нужно настроить конфигурацию либо из командной строки msiexec.exe, либо применив то, что называется преобразованием к исходному файлу MSI. Оба эти варианта описаны ниже в отдельных разделах.

Если файл MSI хорошо спроектирован, вы сможете установить ОБЩЕСТВЕННЫЕ СВОЙСТВА (они всегда UPPERCASE) из командной строки msiexec.exe или с помощью файла преобразования для изменения исходного MSI. Эти операции описаны ниже. Открытые свойства легче всего найти в таблице свойств файла MSI. Используйте инструмент MSI по вашему выбору, чтобы открыть файл *.msi и перейти к таблице свойств. Есть также несколько бесплатных инструментов MSI, которые вы можете использовать для генерации преобразований и просмотра (и редактирования) файлов MSI: Как я могу сравнить содержимое двух (или более) файлов MSI? (ссылки внизу).

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

В целом, все корпоративное тихое развертывание выполняется с использованием преобразований, чтобы "превратить файлы MSI в форму" для корпоративного стандарта. Это очень эффективный инструмент для корпоративного развертывания и широко используется.


МСИ "Особенности"

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

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

Типичные функции: ядро или программа, словари, примеры, плагины, проверка орфографии, SDK и инструменты разработчика (для инструментов разработки) и т. Д.... Некоторые функции являются обязательными (должны быть установлены) - приведенные выше примеры - это ядро и программа другие являются необязательными и не требуются для запуска приложения (как описанные выше функции инструментов разработки). Можно сделать так, чтобы приложение устанавливало функции "по требованию" - например, средства проверки орфографии, когда пользователь запускает проверку правописания.

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


Как упоминалось выше, как правило, есть два способа настройки установки MSI: (1) использование пользовательских командных строк msiexec.exe или (2) файлы преобразования.


1: командная строка msiexec.exe:

Самый простой и легкий способ управления тем, какие функции установлены во время установки, состоит в том, чтобы указать свой выбор функций с помощью msiexec.exe командная строка. Существует целое семейство свойств, используемых для настройки функций. Но в большинстве случаев достаточно указать ADDLOCAL:

msiexec.exe /i myinstaller.msi ADDLOCAL="Program,Dictionaries" /qn

Приведенная выше командная строка указывает, что функции " Программа " и " Словари " должны быть установлены локально (имена функций чувствительны к регистру!). Обычно этого достаточно, но вы также можете указать любые функции, которые хотите удалить, используя свойство REMOVE аналогичным образом. Специальный переключатель ADDLOCAL=ALL который установит все функции в MSI на локальный диск (при условии, что в MSI нет дополнительной логики для переопределения этого). ADDLOCAL свойство на MSDN.

Очень распространенная вещь, определяемая общими свойствами, - это лицензионный ключ для приложения. Следующая командная строка указывает для установки функций " Программа " и " Словари " и применения серийного ключа "1234-1234":

msiexec.exe /i myinstaller.msi ADDLOCAL="Program,Dictionaries" SERIALKEY="1234-1234" /qn

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

Ищите документацию на странице загрузки поставщика и обращайтесь в его службу поддержки за любыми документами, касающимися автоматической установки или крупномасштабного развертывания. Это быстро сделать, и ответы могут быть быстрыми, если у них есть стандартные шаблоны ответов. Компании, которые контролируют их развертывание, всегда смогут это обеспечить. На мой взгляд, идеальным вариантом является одностраничный PDF-файл, в котором описаны различные параметры развертывания. Честно говоря, дайте им немного тепла, если они не могут это обеспечить;-).


2: Преобразования:

MSI -файлы - это, по сути, базы данных SQL, обернутые в структурированные файлы хранения COM (файловая система внутри файла) Файлы преобразования - это "частичные базы данных", созданные с помощью таких инструментов установки, как Orca (ссылка на SDK), Installshield или мудрый , Advanced Installer и т. Д. (Ссылка на описание различных инструментов). Эти преобразования могут настраивать или переопределять практически все параметры или поля базы данных в MSI, включая сведения о том, какие "части приложения" (функции) установлены. После создания преобразования вы указываете его приложение для MSI в командной строке msiexec.exe:

msiexec.exe /i myinstaller.msi TRANSFORMS="mytransform.mst" /qn

Затем установщик Windows объединит MSI и преобразование перед началом установки. Этот подход используется крупными организациями, которые хотят получить полный контроль над тем, как устанавливается MSI. ПРЕОБРАЗОВАНИЯ собственности на MSDN.

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

Многие инструменты могут быть использованы для создания преобразования, вот описание таких инструментов в более техническом контексте сравнения файлов MSI. Просто перейдите к списку бесплатных инструментов внизу: Как я могу сравнить содержимое двух (или более) файлов MSI?


Анти-шаблоны против корпоративных преимуществ установщика Windows:

Установщик Windows имеет много особенностей дизайна и может быть особенно раздражающим для разработчиков. Правда, есть некоторые проблемы, которые граничат с анти-паттернами.

Потенциальные анти-паттерны

  • нелогичные правила перезаписи файлов ( symantec)
    • странные правила, особенно для не версионных файлов
    • безумная функция для принудительной перезаписи всех файлов ( REINSTALLMODE = amus)
      • может понизить общие файлы общесистемной
      • может привести к несовместимому состоянию версий, так как старый пакет может быть установлен после более нового и понижать версию только некоторых общих файлов
      • может понизить или стереть настройки в не версионных файлах (и настройках реестра)
      • может привести к значительному увеличению количества запрошенных перезагрузок из-за попыток ненужной замены используемых файлов той же версии.
      • Есть несколько дополнительных вопросов, которые являются довольно конкретными. Однажды я напишу их все
  • неожиданный сброс пользовательских данных в реестре после обновлений
    • Это крайне проблематично. Если вы испытываете это, это не вы, это технология
    • Часто встречается с учетными данными для входа в систему и серийными ключами.
    • Некоторые методы, чтобы избежать этой проблемы
      • не пишите какие-либо ключи реестра HKCU из вашей установки, вместо этого запишите их из вашего приложения. Ваша настройка теперь никогда не будет мешать им - она ​​вообще не знает значений.
      • размещение данных реестра в отдельной функции (должно предотвратить проблемы с самовосстановлением)
      • установить данные реестра через компонент с пустым идентификатором GUID (после этого он никогда не будет перезаписан во время восстановления или самостоятельного восстановления)
      • установить флаг компонента, чтобы он никогда не перезаписывался, если существует путь ключа.
      • записывать данные HKLM (например, лицензионные ключи) в реестр, используя вместо этого настраиваемое действие (это имеет другие проблемы, но даст вам полный контроль над тем, когда записываются данные - в каком режиме установки)
      • Убедитесь, что вы держите стабильный путь к ключу реестра. Установите значение флага KeyPath = 1 и никогда не меняйте его, и, что важно, не меняйте GUID компонента.
      • никогда не устанавливайте REINSTALLMODE в значение "amus" - конечно, это не жесткий код этого значения в таблице свойств.
      • Есть еще несколько хитростей и практических правил, если бы я только мог вспомнить их все из головы:-).
  • сложный механизм обновления
    • незначительные обновления имеет много ограничений и ограничений
    • У крупных обновлений есть другие проблемы (сброс данных реестра, отсутствие файлов после установки, самостоятельное восстановление файлов COM после установки и т. д.)
  • слабые возможности графического интерфейса
    • не ракетостроение, но несколько сложное
    • не хватает событий и функций для реализации правильно сглаженного графического интерфейса
  • шокирующе сложное исправление
  • чрезвычайно сложная реализация пользовательских действий
    • сложная последовательность
    • комплексное кондиционирование
    • комплексное олицетворение / частичное управление с повышенными правами
    • в целом крайне подвержен ошибкам.
  • слабая реализация пользовательских настроек
    • концептуально сомнительный (перенаправление папок, непредсказуемость, невозможность создания настроек в реальном мире, поддержка как для пользователя, так и для компьютера)
    • Комплекс для обновления, удаления и исправления. Позволяет устанавливать продукты несколько раз для разных пользователей, а также для каждого компьютера.
    • Я должен признать - на субъективной ноте - что я считаю, что текущая реализация настройки для каждого пользователя полностью против развертывания. Я никогда не использую это и настаиваю на том, чтобы, если не принужден
  • неожиданный самовосстановление
  • отсутствие встроенных функций для записи в файлы XML
  • плохие возможности для установок IIS
    • Частью проблемы являются правила перезаписи файлов для неверсированных файлов (возможны непредсказуемые результаты).
    • Честно говоря, IIS может потребоваться совершенно новая технология развертывания - способ определения обработки файлов без контроля версий абсолютно предсказуемым образом - с разумными, реальными возможностями. Возможно автоматическое резервное копирование принудительно замененных не версионных файлов, принудительное применение групп согласованных текстовых файлов ("сборок"), которые должны быть правильной версией для всех них и т. Д.
    • также несколько других проблем со сложной конфигурацией IIS и виртуальных папок и сайтов
  • Небрежное включение "проверки кода завершения " в пользовательских действиях может привести к тому, что пакеты невозможно будет обновить или удалить (без серьезных изменений)
    • крупные обновления могут дать сбой и вызвать откат для чего-то незначительного
    • незначительное обновление может быть использовано для исправления последовательности удаления или неисправной подготовки
  • Есть еще несколько...

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

В инфраструктуре WiX (с открытым исходным кодом) и в коммерческих инструментах (Installshield, Advanced Installer и т. Д.) Реализованы функции, позволяющие расширять установщик Windows, чтобы справляться с отсутствующими функциями, такими как отсутствие механизма обновления для файлов XML, создание общих ресурсов и управление ими. создание пользователей и групп, расширенная конфигурация IIS, установка COM+, изменение разрешений ACL, настройка правил брандмауэра, сохранение свойств установки и т. д. Требуется все меньше и меньше реализовывать свои собственные действия. Всегда используйте возможности, которые уже были протестированы тысячами других пользователей, если можете (даже миллионы пользователей - и эти расширения были написаны лучшими доступными экспертами по развертыванию - как вы думаете, сможете ли вы сделать это лучше самостоятельно?).

Корпоративные преимущества установщика Windows (очень значительный)

Это требует определенного мышления, чтобы приблизиться к установщику Windows. Тем не менее, он предоставляет ряд важных корпоративных преимуществ, которые почти полностью отсутствовали в предыдущих установочных технологиях. Корпоративные преимущества использования файлов MSI рекомендуется к прочтению. Особенно для тех, кто думает, что установщик Windows доставляет больше хлопот, чем стоит.

Чтобы кратко подвести итог связанной статьи, основными корпоративными преимуществами MSI по сравнению с предыдущими технологиями развертывания являются (на мой взгляд):

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

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

Сумерки лет установщика Windows

Поскольку Windows Installer наступает в сумерки, мы можем только надеяться, что технологии развертывания в будущем сохранят эти большие корпоративные преимущества развертывания и будут работать с упомянутыми антишаблонами таким образом, чтобы это приносило пользу всем, и в особенности разработчикам.

Развертывание является важной частью развития. Неудача успешной установки вашего замечательного программного обеспечения для ваших потенциальных конечных пользователей может быть самой дорогой ошибкой в ​​разработке программного обеспечения в целом. Как вы можете добиться успеха, если пользователь никогда не видит ваше программное обеспечение полностью функциональным?

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

Достаточно хорошо: резюме установщика Windows.

Облачные платформы

Со всем этим сказано; По мере того как вычисления в целом переходят на облачные платформы, мир развертывания, скорее всего, изменится непредсказуемым образом. Однако, как гласит известная поговорка: чем больше вещи меняются, тем больше они остаются неизменными. Развертывание должно учитывать все устаревшие технологии, которые будут использоваться в компаниях в течение десятилетий. Вот фрагмент о том, почему развертывание кажется более сложным и не менее сложным, несмотря на весь маркетинг: в чем выгода и реальная цель установки программы?,

Будет интересно посмотреть, каким будет будущее развертывания - в ближайшие годы. Возможно, мы увидим упрощенное развертывание для домашних компьютеров, а корпоративное развертывание станет более сложным, чем когда-либо? В будущем большая часть развертывания, вероятно, будет задачей развертывания базы данных, а не задачей развертывания файлов и папок. В настоящее время развертывание сервера может быть чрезвычайно сложным с помощью сценариев базы данных, создания пользователей и групп, настройки общего доступа и разрешения ACL, счетчиков производительности, обновлений правил брандмауэра, запросов и обновлений AD, настройки COM+ и очереди сообщений, установки службы и т. Д. - целые девять ярдов.


Как настроить тихую настройку MSI

Установку MSI можно настроить в командной строке, задав свойства, которые использует установщик. Существуют предопределенные свойства установщика Windows, такие как свойство ALLUSERS. Это свойство определяет, будет ли установка выполняться в контексте текущего пользователя или компьютера.

Информация о доступных свойствах может быть получена, например, из журнала установки, который можно создать с помощью параметра /l в msiexec.

msiexec /I mysetup.msi /l*vx log.txt

Как создавать файлы MSI

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

Microsoft предлагает простой инструментальный вызов Orca, который позволяет редактировать существующие файлы MSI и позволяет выяснить, какие свойства можно установить для настройки установки. Теоретически также возможно создавать новые файлы MSI, используя этот инструмент, но это очень громоздкий путь.

Если вы ищете бесплатное решение с открытым исходным кодом, я бы порекомендовал вам взглянуть на набор инструментов WiX, доступный на SourceForge или Nullsoft . Вся информация о настройке выполняется с помощью файлов XML, которые затем преобразуются в установщик MSI. WiX стабилен (хотя все еще помечен как бета) и может использоваться в производстве. На самом деле он будет интегрирован в следующую версию Visual Studio 2010.

Конечно, есть и коммерческие решения, InstallShield является лидером рынка (также ценовым лидером), а Visual Studio, вероятно, наиболее распространенным инструментом.

Другие вопросы по тегам