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

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

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

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

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

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

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

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

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


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

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

    Если файл MSI хорошо разработан, вы сможете установить PUBLIC PROPERTIES (они всегда UPPERCASE) из командной строки msiexec.exe или с помощью файла преобразования для изменения оригинального MSI. Эти операции описаны ниже. Публичные свойства легче всего найти в « Таблице свойств » файла MSI. Используйте инструмент MSI по вашему выбору, чтобы открыть файл * .msi и перейдите в таблицу свойств. Существуют также некоторые бесплатные инструменты MSI, которые вы можете использовать для генерации преобразований и просмотра (и редактирования) файлов MSI: как я могу сравнить содержимое двух (или более) файлов MSI? (ссылки внизу).

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

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


    MSI “Особенности”

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

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

    Типичными особенностями являются: Core или Program , Словари , Образцы , Плагины , Проверка орфографии , SDK и инструменты для разработчиков (для инструментов разработчика) и т. Д. Некоторые функции являются обязательными (должны быть установлены) – примеры выше были бы Core и Program , другие являются необязательными и не требуются для запуска приложения (например, вышеописанные функции Dev Tools). Можно установить функции установки приложения «по требованию» – например, проверки орфографии, когда пользователь инициирует проверку орфографии.

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


    Как упоминалось выше, обычно есть два способа настройки установки 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 link), 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 (например, лицензионные ключи) в реестр с помощью пользовательского действия (это имеет другие проблемы, но даст вам полный контроль над записью данных – в каком режиме установки)
        • make darn уверен, что вы сохраните стабильный путь к ключам реестра. Установите значение флага KeyPath = 1 и никогда не меняйте его – и, самое главное, не меняйте компонент GUID либо
        • никогда не устанавливайте REINSTALLMODE в «amus» – конечно же, не жесткий код, который стоит в таблице свойств.
        • есть дальнейшие трюки и эмпирические правила, если только я мог запомнить их всех с головы :-).
    • комплексный механизм обновления
      • незначительные обновления имеют множество ограничений и ограничений
      • основные обновления имеют другие проблемы (сбросить данные реестра, пропустить файлы после установки, самостоятельно восстановить COM-файлы после установки и т. д.)
    • скрытые возможности графического интерфейса пользователя
      • не ракетостроение, а несколько сложное
      • Отсутствие событий и возможностей для реализации правильно гладкого графического интерфейса
    • потрясающе сложное исправление
      • чрезвычайно сложно использовать эффективно
      • не рекомендуется для использования, кроме как «исправление», то есть обновление нескольких файлов или исправление конкретной ошибки файла MSI в последовательности удаления установленной установки.
    • чрезвычайно сложная реализация пользовательских действий
      • сложная последовательность
      • комплексное кондиционирование
      • сложный имитация / частичный запуск с повышенными правами
      • общая чрезмерная погрешность .
    • тусклая реализация настроек для каждого пользователя
      • концептуально сомнительные (переадресация папки, непредсказуемость, невозможность создания настроек в реальном мире поддерживают как для каждого пользователя, так и для каждой установки)
      • комплекс для обновления, удаления и исправления. Позволяет устанавливать продукты несколько раз для разных пользователей, а также для каждой машины
      • Я должен признать – по субъективной ноте – что я считаю текущую реализацию настройки для каждого пользователя полностью включенной анти-шаблоном развертывания. Я никогда не использую его и не настаиваю на том, чтобы его не принуждали .
    • неожиданный саморемонт
      • 1) Саморемонт – объяснил .
      • 2) Саморемонт – поиск реальных решений .
      • 3) Самовосстановление – как этого избежать в вашей собственной упаковке .
    • отсутствие встроенных функций для записи в файлы XML
    • плохие возможности для установки IIS
      • частью проблемы являются правила перезаписи файлов для непереведенных файлов (возможны непредсказуемые результаты).
      • Для IIS может потребоваться совершенно новая технология развертывания, чтобы быть честным – способ определить обработку файлов без версий в совершенно предсказуемом виде – с разумными, реальными вариантами. Возможно, автоматическое резервное копирование замененных без изменений файлов, обеспечивающих принудительное выполнение групп согласованных текстовых файлов («сборки»), которые должны быть правильной версией, и т. Д.
      • также несколько других проблем со сложной конфигурацией IIS и виртуальных папок и сайтов
    • sloppy, позволяющее «проверить код выхода » в пользовательских действиях, может привести к невозможности обновления или удаления пакетов (без серьезной настройки)
      • основные обновления могут завершиться неудачей и вызвать откат для чего-то незначительного
      • незначительное обновление может быть использовано для исправления последовательности удаления или неправильного кондиционирования
    • есть еще несколько …
      • Фактически я написал сводку резюме часто встречающихся анти-шаблонов, которые часто встречаются в реальных пакетах MSI (ошибочное использование технологии): Как избежать общих недостатков дизайна в моем решении для развертывания WiX / MSI?
      • Я могу стоять на всем содержимом, но формат невелик – это грязная свалка мозга, но иногда это единственный способ добиться успеха. Возьмите это за то, что это.
      • Еще одна проблема MSI – чрезмерное использование пользовательских действий. За этим стоит сложность, но в целом проблема заключается в том, что люди не используют полностью функциональные ранее существующие решения в MSI или через расширения, такие как WiX (или коммерческие инструменты, такие как Installshield или Advanced Installer). Вот краткое изложение: почему рекомендуется ограничивать использование пользовательских действий в настройках WiX / MSI?

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

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

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

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

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

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

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

    Сумерки Годы установщика Windows

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

    Давайте будем гением компьютера.