Назад | Перейти на главную страницу

Корпоративные преимущества использования файлов MSI

В чем преимущества использования файлов .msi по сравнению с обычными файлами setup.exe?

У меня сложилось впечатление, что развертывание проще на машинах, где у пользователей мало разрешений, но они не уверены в деталях.

Какие функции msiexec.exe упрощают развертывание по сравнению с использованием сценариев setup.exe?

Есть какие-нибудь советы или рекомендации при развертывании приложений .msi?

ОБНОВЛЕНИЕ, июль 2018 г.: Чрезвычайно сжатый обзор приведенной ниже информации доступен в stackoverflow: Основные преимущества MSI ("executive summary" - своего рода).


Я работал в разработке как релиз-менеджер, инженер-строитель, установщик и как упаковщик приложений и инженер по развертыванию в крупных корпорациях.

Это обзор лучших (и худших) концептуальный и реальные особенности компании MSI. Большинство общие проблемы дизайна найденные в файлах MSI представлены как отдельный ответ ниже. Не претендовать на полноту - на самом деле просто беспорядочная «свалка мозгов» - задуманная как «то, что нельзя найти в книгах» (вероятно, не зря).

Я тоже хочу это предложить Статья MSDN как хорошее чтение: Установщик Windows: преимущества и реализация для системных администраторов.


Стандартизация:

Одним словом, MSI занимается стандартизацией и занимается "запахи развертывания»устаревших технологий установщика. Целый набор неудачных проектов архитектуры установки, вызывающих повторяющиеся проблемы при развертывании.

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

Одни только эти функции представляют собой значительное улучшение по сравнению с предыдущими технологиями установки, которые обрабатывали удаление и автоматический запуск бессистемно - возможно, наиболее важные функции для корпоративного развертывания наряду с надежной удаленное управление пакетами через Active Directory или специальные инструменты удаленного администрирования, такие как Microsoft SCCM (ранее SMS), IBM Tivoli, CA Unicenter и тому подобное.

Кто-то продублировал предыдущую версию этого ответа. Может быть, более быстрое чтение?


Устаревшие установщики «пахнут развертыванием»

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

  • 1) они иногда пониженный и перезаписать общие и версионные файлы мало заботясь о dll-ад что привело
  • 2) часто было неправильная процедура удаления поставляется вместе с установщиком, или он завершился некорректно и надежно, особенно если он запущен без вывода сообщений. Это очень большая проблема для корпоративного управления госпредприятием.
  • 3) тихая установка редко поддерживался должным образом. Надежность была низкой, и часто приходилось записывать запуск установки с диалоговыми выборами, и это плохо справлялось с неожиданными условиями, такими как диалоговые окна с ошибками или предупреждениями, которые не были записаны в исходном запуске.
  • 4) установщик не записывал, что было установлено, и, следовательно, не было автоматического способа проверки файлов на диске, чтобы проверить, остались ли они теми версиями, которые были изначально установлены установщиком.
  • 5) они отличались непредсказуемостью, ненадежностью и нестандартные параметры командной строки для исполняемого файла установки
  • 6) из-за нестандартной командной строки и отсутствия стандартов было сложно настраивать установщики с конкретными значениями, необходимыми для корпоративного развертывания, надежным и предсказуемым образом
  • 7) обычные пользователи не могли запускать эти установки, и часто приходилось возиться с временные права администратора (используйте "запустить от имени", если этого было достаточно, или войдите в систему как администратор, установите и затем выйдите из системы - этот полный вход в систему и создание профиля иногда требовалось для завершения установки)
  • 8) то setup.exe установщик часто не вернуть правильный код ошибки или успешный код, а иногда он немедленно завершался и запускал другой процесс, который завершал установку, что затрудняло определение того, была ли установка завершена, особенно через пакетный файл
  • 9) большинство файлов setup.exe позволяли извлекать файлы, но не надежным, предсказуемым образом - обычно вам приходилось тратить много времени на поиск правильных переключателей, чтобы это сделать
  • 10) протоколирование был в целом плохим и довольно случайным в некоторых инструментах. Отладка с помощью файлов журнала редко приводила к ясности, но немного помогала
  • 11) там было нет прозрачности в том, что делал установщик и нет или ненадежный откат отменить изменения после неудачной установки
  • 12) там было нет отраслевого стандарта из развертывание общих компонентов среды выполнения будь то компоненты операционной системы, сторонние компоненты или ваши собственные

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

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


Преимущества MSI - краткое описание

В простой язык действительно важные преимущества MSI (в произвольном порядке):

  • 1) удалить всегда доступен для каждого пакета, если он не отключен
  • 2) это то же самое для протоколирование, который великолепен и стандартизирован, хотя и подробен (для анализа файлов журналов можно использовать такие инструменты, как WiLogUtl.exe)
  • 3) то, что делает файл MSI, по большей части (полу) прозрачно или "проверяемо". Исключение составляют настраиваемые действия - (см. раздел прозрачности ниже)
  • 4) настройка настройки выполняется стандартным способом (трансформирует)
  • 5) нет необходимости возиться с временные админ-права поскольку установка выполняется с повышенными правами через рекламу Active Directory, групповую политику или удаленное администрирование. Некоторые уточнения здесь. Также см этот снимок экрана из редактора объектов групповой политики.
  • 6) тихая установка / удаление с помощью инструментов управления или с помощью msiexec.exe работает хорошо
  • 7) там полно откат поддержка неудачных установок. Если вы устанавливаете на бокс вручную, есть некоторые оговорки вам нужно знать о.
  • 8) файл MSI поддается как проверке, так и проверке на непротиворечивость и логическую достоверность, поскольку они соответствуют схеме базы данных (см. пример проверки)
  • 9) обновления представляют собой стандартные типы, хотя и сложные и часто подвержены ошибкам для неопытных упаковщиков
  • 10) то извлечение файлов из msi - это встроенная функция (проверьте связанную статью, чтобы получить хороший быстрый обзор)
  • 11) командную строку установщика Windows, msiexec.exe, имеет очень точный контроль над тем, как должна выполняться последовательность установки, и все параметры работают со всеми стандартными файлами MSI (установить уровень журнала, запускать тихо / интерактивно / полу-тихо, установить параметры установки, применить преобразования и т. д. ...).
  • 12) объединить модули - это механизм MSI для доставки общих файлов с несколькими пакетами MSI. Это расходный модуль или связка логики установки, которую можно объединить с любым пакетом MSI во время компиляции. Wix расширил и улучшил эту концепцию с использованием включаемых файлов Wix - концепции, которая, на мой взгляд, превосходит модули слияния - особенно для ваших собственных файлов (то есть не файлов ОС).
  • 13) сам движок установщика Windows имеет механизм для предотвращение перезаписи версионных или измененных файлов по установке. Это контролируется довольно сложная логика замены файлов. Хотя эта логика эффективна и хороша, она сама по себе может стать проблемой, поскольку многие разработчики сталкиваются с проблемой невозможности перезаписать свои измененные файлы конфигурации при обновлении. Решением этих проблем обычно являются незначительные изменения в дизайне приложения, чтобы избежать общие антишаблоны развертывания - хотя это отдельная большая дискуссия.

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

В остальной части текста некоторые из этих аспектов MSI рассматриваются более подробно.


Прозрачность (открытый формат установщика)

Файл MSI - это, по сути, урезанный База данных SQL-сервера хранится как Файл хранилища со структурой COM - по сути файловая система в файле или совокупность потоков данных. Это тип файла, используемый в Документы Microsoft Office, и это дает стандартный формат это может быть рассмотрел и осмотрел - а огромная проблема для крупных корпораций.

За исключением скомпилированных настраиваемых действий, файл MSI является белая коробка. Если установка изменяет что-то сумасшедшее, например, общесистемные сетевые настройки, вы можете увидеть это, используя соответствующие инструменты. Заметным исключением является скомпилированные настраиваемые действия - которые черный ящик. Требования к логотипу Windows требуют, чтобы пользовательские действия были аннотированы, чтобы объяснить, что они делают, но разработчики установки часто игнорируют это. Надеюсь, с появлением Wix ситуация улучшится.

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

Возможность настройки (трансформируется)

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

msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

Краткое описание параметров:

/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.

Управление и отчетность

Установщик Windows поддерживает обширная база данных всех элементов, установленных продуктом в реестре (HKEY_CLASSES_ROOT \ Установщик - никогда ничего не меняйте прямо здесь! Это касается и экспертов).

Вы можете надежно определить, установлен ли продукт, какие функции были установлены и какие версии файлов были установлены. Кроме того, вы можете получить список любых исправлений, которые были применены к базовому продукту, если таковые имеются. Вы можете получить доступ к этой базе данных через API, поддерживающие Win32, COM или .NET. используя различные инструменты сценариев, настройки и администрирования, такие как Microsoft SCCM, IBM Tivoli, CA Unicenter и т.д...

Безопасность (временные повышенные права)

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

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

Проверка

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

Устойчивость (Самостоятельный ремонт)

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

С этой функцией отказоустойчивости также связаны общие проблемы. Большинство администраторов имели опыт работы на машинах с циклические циклы самовосстановления это, кажется, никогда не прекратится. Перейдите по ссылке, чтобы просмотреть длинный список причин этой проблемы. И опять, вот более короткая версия это может быть легче читать.

Откат

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

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

Откат гарантирует, что рабочая станция останется в стабильном состоянии даже в случае сбоя установки. В фактический сценарий отката хранится в скрытая папка непосредственно на системном диске - обычно C: \ Config.MSI, и он содержит файлы с расширениями .RBS и .RBF - Файлы сценариев отката. Как и следовало ожидать, плохо спроектированные файлы MSI могут нарушать встроенные функции Windows, см. Другой мой пост в этой ветке для получения более подробной информации.

Есть способы отключить откат и ускорить установку. Обычно не рекомендуется, но вот подробности о свойстве MSIFASTINSTALL и DISABLEROLLBACK. Это сложная функция, но вот краткий обзор отката.

Исправления и обновления

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

С субъективной точки зрения исправление работает хорошо для 2 основных использования: 1) небольшие исправления для поставляемых продуктов, и 2) исправление установленного продукта для исправления неправильной последовательности удаления, которая препятствует чистому удалению продукта.

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

логирование (действительно многословно)

Установщик Windows предоставляет стандартизированная функция ведения журнала что намного превосходит предыдущие воплощения, хотя и является почти чрезмерно многословным. Файлы журнала можно расшифровать с помощью анализаторы журналов, и настраиваемые уровни журнала может использоваться для исключения создания слишком больших файлов журнала с ненужной информацией. Для целей отладки чрезвычайно полезно подробное ведение журнала. Видеть Блог Роба Меншинга для хорошего ручного способа чтения файла журнала MSI (по сути, вы ищете "значение 3"в файле журнала). Вот пример командной строки, которая выполняет подробное ведение журнала:

msiexec.exe /I "C:\Installer.msi" /QN /L*V "C:\msilog.log"

Эта статья из Роберт Макдональд из Команда установщиков Windows настоятельно рекомендуется как практический взгляд на ведение журнала MSI: Как интерпретировать журналы установщика Windows.


Вывод

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

Новая парадигма установщика (огромный оператор SQL)

Чтобы понять новое »парадигма"важно понимать, что MSI задуман как декларативное описание того, что должно произойти в целевой системе, а не фиксированной последовательности событий. Я полагаю, вы можете думать об этом как о огромный SQL-оператор. Например, вы объявляете элементы, которые хотите добавить или изменить в INI-файле. В процессе установки изменения отслеживаются, и доступен откат, так что изменения могут быть отменены в случае сбоя установки. Это действительно работает как "автомагия", и надежен, когда все сделано правильно.

Пользовательские действия (обычные подозреваемые)

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

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

MSI имеет полную поддержку обработки слияния настроек ini-файла, шрифтов, переменных среды, ключей реестра, информации COM, ярлыков, расширений файлов, условий запуска, установки GAC, ODBC и т. д.

WIX идет дальше с поддержкой очень продвинутые функции такие как расширения SQL-сервера, установка и настройка IIS, счетчики производительности, проверка DirectX и другие задачи, связанные с играми, создание собственных образов .NET, COM +, драйверы, правила брандмауэра, расширения PowerShell, закрытие приложений, управление пользователями, группами, общими ресурсами и т. д. Больше. Сложно разобраться, но гораздо надежнее, чем ваши собственные действия.

По возможности избегайте нестандартных действий любой ценой

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

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

Используйте последовательность запуска приложения

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

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

Если вы разработчик установки, вам следует предложить принять участие в кодировании последовательности запуска приложения вместо написания настраиваемых действий.. Во всяком случае, чтобы не выглядеть так, будто вы пытаетесь «переложить ответственность» на кого-то другого. В этой последовательности запуска вы можете написать гораздо более надежный и тестируемый код, который легче получить от персонала QA для тестирования (они часто не понимают тестирование развертывания так же, как тестирование приложений).

Сложность настройки

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

WiX (лучшее решение MSI для некоторых целей)

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

N.B: См. В другом месте в ветке краткое изложение общие проблемы дизайна с файлами MSI - он очень неполный, но его стоит прочитать. Я не хотел добавлять это к этому ответу, поскольку это не на 100% связано, но для реального использования это важная тема.


Некоторая основная информация MSI для системных администраторов:

(простите за бессовестное "продвижение" - это для легкого доступа и поиска)

Вот лишь несколько ссылок на темы, которые могут быть полезны системным администраторам в их усилиях по управлению развертыванием в своих сетях:

Специальные разделы с практическими рекомендациями:

Концептуальные темы / передовая практика:

Всего несколько преимуществ:

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

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

Для получения дополнительной информации о работе с установками MSI введите msiexec в диалоговом окне "Выполнить".

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


Типичные проблемы и недостатки конструкции, обнаруженные в пакетах MSI

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

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

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

Типичные ошибки в MSI (в произвольном порядке - и на самом деле представлены как настоящий беспорядок):

  • ошибки создания компонентов (не следует передовой практике). Это может вызвать проблемы с установкой исправлений и обновлений с загадочными симптомами, такими как отсутствующие файлы и настройки, или исправления, которые взрываются бессмысленными ошибками. Для упрощения следует использовать один файл для каждого компонента, если количество файлов не слишком велико.
  • проблемы с обновлением относящиеся к перезаписи или сбросу пользовательских данных. Подробнее см. Ниже.
  • неправильное планирование настраиваемых действий вне «транзакционного раздела» последовательностей установки или пользовательские действия неправильного типа размещаются неправильно. Это часто приводит к сбою действий (без повышенных прав) при удаленном запуске через системы развертывания, а откат фактически затрудняется, поскольку откатываются только транзакционные действия. Транзакция установщика Windows (думаю, фиксация транзакции базы данных) выполняется между стандартными действиями InstallInitialize и УстановитьFinalize в основной последовательности установки и работает с повышенными правами. Все изменения в системе должны происходить в этой транзакции - все остальное ошибочно (но, к сожалению, довольно часто).
  • использование настраиваемых действий немедленного режима для внесения изменений в систему вне установленной последовательности установки. Это нарушает поддержку отката и обычно вызывает ошибки безопасности, поскольку пользовательские действия в немедленном режиме не выполняются с повышенными правами пользователя, независимо от того, где они находятся в последовательностях установки.
  • ошибочные конструкции, которые вызывают повторяющиеся циклы самовосстановления происходить без очевидной причины. Вот еще одна статья на эту тему с сайта installsite.org.
  • настраиваемые действия которые не подчиняются подавлению графического интерфейса пользователя в режиме автоматической установки, могут отображать модальные диалоговые окна, которые приводят к полному сбою развертывания при выполнении в автоматическом режиме. Эта проблема вместе с общей разницей между беззвучным режимом и интерактивным режимом описана более подробно здесь (несколько многословно и многословно): Удаление из панели управления отличается от удаления из .msi
  • некоторые настраиваемые действия в ошибочно созданных пакетах вставляется только в последовательности пользовательского интерфейса. Это заставляет их не запускаться в режиме автоматической установки. Это серьезно для корпоративного развертывания, поскольку здесь почти исключительно используется тихая установка. Эта проблема также может повлиять на удаление, что означает, что вам, возможно, придется запустить удаление в интерактивном режиме для удаления, чтобы обеспечить выполнение всех настраиваемых действий очистки. Опять же, см. Ссылку в предыдущем пункте для более подробного описания уровней пользовательского интерфейса.
  • установка содержит файлы, которые не предназначены для развертывания в том месте, куда они устанавливаются. Обычно системные файлы, которые должны быть установлены бок о бок в папке сборки winsxs.
  • низкая скорость установки это еще одна «проблема», о которой многие сообщают в MSI. Вот несколько советов по теме. В целом установщик Windows имеет довольно много накладных расходов из-за жестких требований к регистрации в реестре того, что устанавливается.
  • перезапись персонализированной информации или общие файлы данных. Это может произойти, если, например, файл INI установлен через таблицу File, а не через таблицу IniFile. В последнем случае это рассматривается как «транзакция изменения», в первом случае это операция замены файла, что обычно неверно, если только ваш INI-файл не имеет нестандартного форматирования или больших разделов комментариев, которые вы хотите развернуть с вашим файлом (обычно инструменты разработчика).
  • то сложные правила перезаписи файлов может привести к непреднамеренной перезаписи файлов или их не обновлению - это классическая проблема MSI. Прочтите эту статью, чтобы узнать, как принудительно перезаписать файл, который не обновляется.. Правила могут быть немного изменены с помощью пользовательских настроек для REINSTALLMODE свойство установлены на уровне командной строки msiexec.exe (перезаписать более старые версии, перезаписать одинаковые версии, перезаписать любую версию и т. д.), и они работают по-разному для файлов данных и файлов с версиями. Подробности в SDK. Понимание этого очень важно, и этот замысел часто осуждается, даже если его понимают.
  • самостоятельная регистрация COM файлов во время установки может вызывать предупреждения системы безопасности или вызывать проблемы различными способами. Проверьте эту статью: Самостоятельная регистрация считается вредной.
  • разновидностью проблемы замены файлов является случай, когда крупное обновление (который удаляет и переустанавливает продукт) удаляет измененные файлы и переустанавливает версии по умолчанию. В этих случаях контент выглядит перевернутым или перезаписанным когда на самом деле он был сначала удален, а затем установлен заново.
  • службы, работающие с пользовательскими учетными данными могут потерять свои учетные данные во время основных сценариев обновления, а также вернуть файл настроек (кажется) к значениям по умолчанию (они были действительно удалены и переустановлены). Для записи: на мой взгляд, сервисы, работающие с учетными данными пользователя, - это в первую очередь недостаток дизайна.
  • общественная собственность не передаются должным образом от клиента к серверному процессу, что препятствует ожидаемому завершению настраиваемых действий. Это включает обновление свойства SecureCustomActionProperties.
  • Некоторые приложения не могут работать должным образом для других пользователей, кроме того, который установил программу установки изначально. Это серьезная ошибка дизайна, но обычно ее могут исправить опытные разработчики приложений, использующие самовосстановление или ActiveSetup добавить Ключи реестра HKCU и файлы профиля пользователя. Это довольно сложный предмет, и для его работы может потребоваться немного черного искусства. Для записи: реальное решение, на мой взгляд, состоит в том, чтобы изменить само приложение, чтобы иметь возможность инициализировать все настройки для каждого пользователя на основе настроек по умолчанию и шаблонов, скопированных из местоположения на каждой машине или на основе внутренних настроек приложения по умолчанию (из исходный код).
  • Некоторые файлы MSI портят безопасность установленных файлов установив полные права чтения / записи для пользователей без прав администратора здесь, там и везде. В других случаях приложение перестает работать в более новых версиях Windows из-за отсутствия разрешений. Разработчики пакетов приложений довольно часто сталкиваются с анализом потребностей приложения в настраиваемых разрешениях. Обычно требуется дополнительное разрешение в HKLM или где-нибудь в% ProgramFiles%
  • Некоторые Installshield прежние настройки пытались подключиться к Интернету во время установки. Это ужасно для корпоративных сценариев развертывания, где развертывание жестко контролируется, и установщику никогда не будет разрешено загружать новый контент непосредственно из Интернета.
  • Другая сетевая проблема возникает, когда настройки пытаются показать графический интерфейс, в который люди вводят данные, которые проверяются через Интернет при установке, или просто для отображения живого контента со своих веб-сайтов. Обычно это адреса электронной почты, контактная информация, лицензионные ключи и тому подобное. Подключение может полностью прерваться по многим причинам, часто из-за отсутствует конфигурация прокси в корпоративных средах (нет прямого подключения к Интернету, весь Интернет-трафик направляется через определенный кэш-сервер, и каждый процесс должен предоставить учетные данные для прохождения через брандмауэр). Вот статья об опасностях проверки лицензий через установку.
  • Installshield используется для установки среды выполнения для своего Installscript язык. это предварительная установка обычно был включен в setup.exe, и это был легендарный источник проблем. Было много версий, несколько несовместимостей и ряд ошибки времени выполнения бывало. Начиная с версии 12 (или около того) эта среда выполнения теперь надежно установлена, и она надежно либо компилируется в собственный, либо работает в изолированной среде (я не уверен, в какой - то или другой - вероятно, в песочнице). Однако более старые настройки Installshield могут отображать эту проблему развертывания. Существует устаревший сайт поддержки от Installshield для решения таких проблем, как: http://consumer.installshield.com/common.asp
  • Некоторые настройки могут отображать неустойчивое поведение установки или периодические ошибки при запуске на машинах, настроенных для языков, отличных от английского, или даже при запуске локализованные (переведенные) версии сетапов на английских машинах. Это может быть просто сбой во время выполнения, или случаи, когда в локализованных диалоговых окнах есть обрезанный текст, ошибочное форматирование, неправильный перевод или многие другие типы ошибок, связанных с языковая локализация - отдельная область знаний (перевод текста в изображениях, перевод самого программного обеспечения, перевод маркетинговых материалов, обработка запросов в международную поддержку, адаптация к языковым настройкам в ОС и т. д.). Некоторые языки требуют изменения всего приложения, чтобы учесть особенности их языка - типичными проблемами являются строковые макросы и настройки кодовой страницы, причем последнее становится меньшей проблемой с введением Unicode. См. Образец снимка экрана из инструмента перевода.
  • Почти все настройки выходят из строя некоторые из встроенных валидационные испытания которые доступны для проверки качества пакетов MSI. Видеть Эта статья для практического примера проверки.
  • Иногда обновления MSI не выполняются из-за того, что фактически проверяются только 3 цифры номера версии MSI во время сканирования основных обновлений.
  • Установка файлов INI - это встроенная функция установщика Windows. Записи могут быть добавлены, удалены, объединены или обработаны любым необходимым способом. Однако довольно часто файлы INI устанавливаются как файл, а не как сегментированные значения. Это может вызвать перезапись файла INI во время переустановки вместо обновления. Очень распространенная проблема MSI.
  • Вышеупомянутая проблема также касается приложений .NET и их файлов Config.xml. В этом случае MSI НЕ имеет встроенного способа подробного обновления содержимого, и вам нужно либо закодировать обновление с помощью настраиваемого действия, либо заменить весь файл при установке. У Wix могут быть новые функции для этого, но движок установщика Windows не имеет такой встроенной функции.

Есть ряд более тонких ошибок и несколько более крупных типичных проблем, о которых я забуду.

Проверьте Рекомендации по установке Windows статья из MSDN.

Использование MSI также упрощает установку исправлений (файлы MSP) и обновления. MSI использует концепцию уникальных кодов продуктов и обновлений, что упрощает весь процесс.

Некоторые системы развертывания (одним из примеров является CA Unicenter Software Delivery) также могут особым образом понимать MSI, что позволяет им гораздо лучше интегрироваться в систему развертывания. Например, вы можете передать MSI-файл в библиотеку программного обеспечения системы развертывания, и он автоматически обнаружит различные функции в продукте и автоматически разрешит гораздо более детализированные настраиваемые действия (локальная установка, проверка, восстановление и т. Д.) И ведение журнала.

Самовосстановление / восстановление также является большим плюсом для MSI.

Также ознакомьтесь с открытым исходным кодом XML установщика Windows, "набор инструментов, который собирает установочные пакеты Windows из исходного кода XML. Набор инструментов поддерживает среду командной строки, которую разработчики могут интегрировать в свои процессы сборки для сборки установочных пакетов MSI и MSM". Это используется MS для подготовки нескольких своих основных программных пакетов.

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

чтобы узнать, что люди делают с msis [или автоматическим развертыванием], посетите, например, этот сайт и его форумы.