ОБНОВЛЕНИЕ, июль 2018 г . : Чрезвычайно сжатая сводка приведенной ниже информации доступна по стековому потоку: основные преимущества MSI ( "executive summary"
- своего рода).
Я работал в разработке в качестве менеджера выпуска , инженера сборки , разработчика установки и в качестве упаковщика приложения и инженера развертывания в крупных корпорациях.
Это обзор лучших (и худших) концептуальных и реальных особенностей MSI. Наиболее распространенные проблемы проектирования, обнаруженные в файлах MSI, представлены в виде отдельного ответа ниже . Не претендуя на полноту - на самом деле просто грязную «мозговую свалку» - задуманную как «то, чего нет в книгах» (вероятно, по уважительной причине).
Я также хочу предложить эту статью MSDN как хорошее чтение: Установщик Windows: преимущества и реализация для системных администраторов .
Стандартизация:
Одним словом, MSI - это стандартизация и работа с « запахами развертывания » устаревших технологий инсталляторов. Целая коллекция неверных проектов архитектуры установки, которые вызывали многократные проблемы развертывания.
В целом, MSI предоставляет всеобъемлющую стандартизированную среду для установщика, которая также включает в себя деинсталляцию и встроенные функции и опции для бесшумной работы со стандартизованным графическим интерфейсом, который можно запускать удаленно .
Одни только эти функции представляют собой значительное улучшение по сравнению с предыдущими технологиями установки, которые рассматривали удаление и тихий запуск случайно - возможно, наиболее важные функции для корпоративного развертывания наряду с надежным удаленным управлением пакетами через Active Directory или специализированные инструменты удаленного администрирования, такие как Microsoft SCCM (ранее SMS), IBM Tivoli , CA Unicenter и аналогичные.
Кто-то продублировал предыдущую версию этого ответа . Может быть, быстрее читать?
Устаревшие установщики "Запахи развертывания"
MSI активно противодействует устаревшим запахам развертывания . Эти темы обсуждаются в последующих разделах ниже, но в качестве краткого списка наиболее узнаваемыми проблемами с устаревшими установщиками и более старой технологией развертывания были:
- 1) они иногда понижают версию и перезаписывают совместно используемые и версионные файлы, не заботясь о dll-аде, который
- 2) часто не было надлежащей процедуры удаления, поставляемой с установщиком, или она не выполнялась должным образом и надежно - особенно если она выполнялась без вывода сообщений. Это очень большая проблема для корпоративного управления SOE
- 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-Server, хранящаяся в виде файла хранения с 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 \ Installer - никогда здесь ничего не меняйте напрямую! Это касается и экспертов).
Вы можете надежно определить, установлен ли продукт, какие функции были установлены и какие версии файлов были установлены. Кроме того, вы можете получить список любых исправлений, которые были применены к базовому продукту, если таковые имеются. Вы можете получить доступ к этой базе данных через API, поддерживающие Win32, COM или .NET, используя различные инструменты сценариев, настройки и администрирования, такие как Microsoft SCCM , IBM Tivoli , CA Unicenter и т. Д.
Безопасность (временно повышенные права)
MSI также включает в себя принципы «повышенных прав», которые позволяют пользователю с ограниченными правами запускать установку продукта, для которого требуются права администратора. Это часть « рекламной функции », которая позволяет администратору делать установщики доступными для пользователей, фактически не устанавливая их на всех рабочих станциях. Сам установщик должен быть правильно создан для нескольких основных учетных записей, чтобы эта концепция повышенных прав работала правильно. Пользователи могут инициировать установку продукта самостоятельно, или же установка может контролироваться специальной системой развертывания, такой как SCCM, Tivoli, Unicenter (обычно более крупные компании). Нет необходимости возиться с временными правами администратора, чтобы все заработало что часто бывает с устаревшими установщиками.
Полная база данных по установке также гарантирует, что у вас есть полный обзор установленных исправлений и, следовательно, возможность обнаружения уязвимостей в безопасности с помощью средств автоматизации и администрирования.
Проверка
Файлы MSI можно проверить с помощью правил проверки, чтобы убедиться, что они соответствуют ряду правил внутренней согласованности (называемых ICE).). Корпорации могут создавать свои собственные проверки ICE для обеспечения соблюдения специальных корпоративных правил и требований. Это очень помогает с QA. Причина проверки возможна из-за самореферентной природы реляционных баз данных и связанной схемы базы данных. База данных должна быть внутренне согласованной и соответствовать собственной схеме в отношении внешних ключей, типов данных, ширины поля, версии схемы и т. Д. Проверка также выходит за рамки этого и способна обнаруживать подлинные логические недостатки и ошибки в пакете , а не только недостатки форматирования и типа. Например, он может обнаруживать файлы или типы файлов, которые развертываются в ошибочных целевых местах назначения.
Устойчивость (Самовосстановление)
Функция установки администратора в установщике 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-файл. По мере выполнения установки изменения отслеживаются и доступен откат, так что изменения могут быть отменены в случае сбоя установки. Это действительно работает как « автоматик » и надежно, если все сделано правильно.
Custom Actions (обычные подозреваемые)
Это огромная головная боль для опытных разработчиков 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, регистрация служб, установка на пути к компьютеру и любые другие вещи, которые приложение не может написать самостоятельно с обычными правами пользователя.
Если вы являетесь разработчиком установки, вам следует предложить заняться кодированием последовательности запуска приложения вместо написания пользовательских действий по настройке . Если не что иное, чтобы не выглядеть так, будто вы пытаетесь «передать деньги» кому-то другому. В этой последовательности запуска вы можете написать гораздо более надежный и тестируемый код, который будет проще получить помощь от тестировщиков (они часто не понимают тестирование развертывания, а также тестирование приложений).
Сложность настройки
Суть сложности установки заключается в том, что ошибки являются кумулятивными (вы управляете процессом доставки, а не просто быстрой перекомпиляцией), ошибки очень трудно отлаживать (нет доступа к системам, где возникают ошибки) и целевой системе состояния различаются практически во всех мыслимых отношениях . Пожалуйста, ознакомьтесь с этим ответом для более подробного обсуждения этой сложности и того, как целевые системы могут опасаться поразительным количеством способов: установщик Windows и создание WiX, и сложность развертывания (см. Внизу).
WiX (лучшее решение MSI для некоторых целей)
Прочтите это краткое введение в WiX для описания нового XML-способа компиляции MSI-файлов. Текстовые исходные файлы обеспечивают намного лучший контроль исходного кода, чем раньше. Это бесплатный инструмент с открытым исходным кодом, который настоятельно рекомендуется .
NB : Смотрите в другом месте в потоке быстрое изложение типичных проблем проектирования с файлами MSI - это очень неполно, но его стоит прочитать. Я не хотел добавлять это к этому ответу, так как он не связан на 100%, но для реального использования это важная тема.
Некоторая основная информация MSI для системных администраторов:
(простите за бесстыдное «продвижение» - это для легкого доступа и поиска)
Вот лишь несколько ссылок на темы, которые могут быть полезны системным администраторам в их усилиях по управлению развертыванием в своих сетях:
Специальные инструкции:
Концептуальные темы / лучшие практики: