Каковы преимущества использования MSI-файлов перед обычными файлами setup.exe?
У меня сложилось впечатление, что развертывание проще на машинах, где у пользователей мало прав, но они не уверены в деталях.
Какие функции есть в msiexec.exe, что делает развертывание более простым, чем использование сценариев setup.exe?
Какие-либо советы или хитрости при развертывании приложений .msi?
источник
ОБНОВЛЕНИЕ, июль 2018 г . : Чрезвычайно сжатая сводка приведенной ниже информации доступна по стековому потоку: основные преимущества MSI (
"executive summary"
- своего рода).Я работал в разработке в качестве менеджера выпуска , инженера сборки , разработчика установки и в качестве упаковщика приложения и инженера развертывания в крупных корпорациях.
Это обзор лучших (и худших) концептуальных и реальных особенностей MSI. Наиболее распространенные проблемы проектирования, обнаруженные в файлах MSI, представлены в виде отдельного ответа ниже . Не претендуя на полноту - на самом деле просто грязную «мозговую свалку» - задуманную как «то, чего нет в книгах» (вероятно, по уважительной причине).
Я также хочу предложить эту статью MSDN как хорошее чтение: Установщик Windows: преимущества и реализация для системных администраторов .
Стандартизация:
Одним словом, MSI - это стандартизация и работа с « запахами развертывания » устаревших технологий инсталляторов. Целая коллекция неверных проектов архитектуры установки, которые вызывали многократные проблемы развертывания.
В целом, MSI предоставляет всеобъемлющую стандартизированную среду для установщика, которая также включает в себя деинсталляцию и встроенные функции и опции для бесшумной работы со стандартизованным графическим интерфейсом, который можно запускать удаленно .
Одни только эти функции представляют собой значительное улучшение по сравнению с предыдущими технологиями установки, которые рассматривали удаление и тихий запуск случайно - возможно, наиболее важные функции для корпоративного развертывания наряду с надежным удаленным управлением пакетами через Active Directory или специализированные инструменты удаленного администрирования, такие как Microsoft SCCM (ранее SMS), IBM Tivoli , CA Unicenter и аналогичные.
Кто-то продублировал предыдущую версию этого ответа . Может быть, быстрее читать?
Устаревшие установщики "Запахи развертывания"
MSI активно противодействует устаревшим запахам развертывания . Эти темы обсуждаются в последующих разделах ниже, но в качестве краткого списка наиболее узнаваемыми проблемами с устаревшими установщиками и более старой технологией развертывания были:
Список дополняется множеством других важных и признанных недостатков развертывания . Очевидно, что именно в мире корпоративного развертывания эти проблемы возникали чаще всего, и это привело к бизнесу « переупаковки приложений », где устаревший установщик захватывается с помощью технологий сканирования дисков и реестра , чтобы создать файл MSI, соответствующий стандартам. для надежного развертывания.
Переупаковка приложений - это специальная работа, которая обычно дает MSI-файлы превосходного качества, если все сделано правильно грамотными людьми, но невозможно перепаковать все приложения из-за сложной логики регистрации, которая должна работать в интерактивном режиме для работы определенных приложений.
Преимущества MSI - краткое описание
На простом языке действительно важными преимуществами MSI являются (в произвольном порядке):
В реальном мире я обнаружил, что менее удачные аспекты включают в себя исправления (очень сложные), MSI-GUI (простые функции, довольно сложные, не хватает гибкости), отказоустойчивость (может вызвать затруднения при отладке повторяющихся проблем самовосстановления ) и общую сложность. работы с технологией для начинающих (временами высокая сложность базовых операций - например, обновления, графический интерфейс и множество взаимодействующих деталей приводят к неожиданным результатам и т. д.). Скорость процесса установки также значительно замедлилась из-за увеличения накладных расходов MSI. Посмотрите некоторые советы по улучшению скорости установки MSI .
В остальной части текста более подробно рассматриваются некоторые из этих аспектов MSI.
Прозрачность (открытый формат установщика)
Файл MSI - это, по сути, урезанная база данных SQL-Server, хранящаяся в виде файла хранения с COM-структурой - по существу, файловая система в файле или набор потоков данных. Это тип файла, используемый в документах Microsoft Office , и он дает стандартный формат, который можно просматривать и проверять - огромная проблема для крупных корпораций.
За исключением скомпилированных пользовательских действий, файл MSI представляет собой белое поле . Если настройка изменяет что-то сумасшедшее, такое как общесистемные настройки сети, вы можете увидеть это с помощью соответствующих инструментов . Заметным исключением являются скомпилированные пользовательские действия, которые представляют собой черный ящик . Требования к логотипу Windows требуют, чтобы пользовательские действия были аннотированы, чтобы объяснить, что они делают, но это часто игнорируется разработчиками установки. Надеемся, что появление Wix улучшит это.
Чтобы определить, что на самом деле делают такие скомпилированные пользовательские действия в техническом смысле, необходим захват установки . Это вряд ли когда-либо сделано в моем опыте. Более распространенным является обращение к поставщику за информацией, если программное обеспечение требует одобрения для корпоративного развертывания, и тогда это может быть само приложение, которое препятствует его использованию, а не только настройка.
Настраиваемость (трансформируется)
MSI может быть настроен с помощью преобразований в соответствии с потребностями и стандартами организации, в то же время обеспечивая совместимость с обновлениями установщика поставщика. Вы не изменяете сам установщик, вы создаете свою настройку в отдельном, специфичном для организации файле, называемом преобразованием (MST-файл) (фрагмент базы данных или транзакция изменения, если хотите). Вы можете отключить пользовательские действия и вообще изменить, переопределить или отключить что-либо в установщике, и вы даже можете добавлять новые вещи, в том числе файлы. Файлы преобразования также иногда используются для локализации файла MSI на разные языки. Несколько преобразований могут быть применены к одному MSI, вот пример с усеченными путями :
Краткое описание параметров:
Управление и отчетность
Установщик 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 » в файле журнала). Вот пример командной строки, которая выполняет подробное ведение журнала:
Эта статья Роберта Макдональда из группы установщиков 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 для системных администраторов:
(простите за бесстыдное «продвижение» - это для легкого доступа и поиска)
Вот лишь несколько ссылок на темы, которые могут быть полезны системным администраторам в их усилиях по управлению развертыванием в своих сетях:
Специальные инструкции:
Концептуальные темы / лучшие практики:
источник
Этот ответ в значительной степени находится в стадии разработки и является приблизительным. Дополнения, вопросы и обновления приветствуются. Этот список ни в коем случае не является исчерпывающим. Добавьте комментарий с информацией о проблемных пакетах.
Типичные проблемы и недостатки дизайна, видимые в пакетах MSI
Я также должен предупредить, что многие файлы MSI содержат ошибки, иногда серьезные, но обученные упаковщики приложений смогут обнаружить это и в большинстве случаев устранить проблему. Я добавляю это как отдельный ответ, так как он по существу отвечает на другой вопрос, но я чувствую, что он актуален в той же теме.
Технические детали, связанные с MSI, очень сложны . На базовом уровне речь идет о разбиении ваших файлов и настроек реестра на компоненты (атомарная установка) и функции (выбираемые пользователем части приложения для установки, например, словарь). Существует несколько правил для разделения компонентов, и ошибок в файлах MSI здесь предостаточно. Эти ошибки, как правило, обрабатываются путем стандартизации использования «крупных обновлений».
Фактическая установка выполняется в несколько последовательностей установки, некоторые с повышенными правами . Все эти вещи определены в таблицах базы данных, и именно здесь MSI ужасно сложно понять и разобраться. Распространение по всей последовательности установки стандартных и пользовательских действий. Стандартные действия разработаны Microsoft и должны быть выполнены (последовательность может быть изменена). Пользовательские действия доступны поставщикам для выполнения пользовательской логики, не охватываемой самой MSI. Они могут быть в скрипте или скомпилированном виде. Пользовательские действия могут быть немедленными (запускаться сразу, не должен изменять систему, но часто это делает) или откладываться (записываться в сценарий исключения, который затем выполняется как транзакция и, следовательно, поддерживает откат).
Типичные ошибки в MSI (в произвольном порядке - и представлены как настоящий беспорядок):
Есть ряд более тонких ошибок и несколько более типичных проблем, о которых я забуду.
Ознакомьтесь с рекомендациями по установке Windows от MSDN .
источник
Использование MSI также упрощает исправления (файлы MSP) и обновления. MSI использует концепцию уникальных кодов продуктов и обновлений, которая облегчает весь процесс.
Некоторые системы развертывания (например, CA Unicenter Software Delivery) также могут понимать MSI особым образом, что позволяет им намного лучше интегрироваться в систему развертывания. Например, вы можете ввести MSI в библиотеку программного обеспечения системы развертывания, и она автоматически обнаружит различные функции в продукте и автоматически разрешит гораздо более детализированные пользовательские действия (локальная установка, проверка, восстановление и т. Д.) И ведение журнала.
Самовосстановление / восстановление также является основным плюсом для MSI.
источник
Также ознакомьтесь с XML-установщиком Windows с открытым исходным кодом , «набором инструментов, который создает пакеты установки Windows из исходного кода XML. Набор инструментов поддерживает среду командной строки, которую разработчики могут интегрировать в свои процессы сборки для создания пакетов установки MSI и MSM». Это используется MS для подготовки нескольких основных пакетов программного обеспечения.
источник
Вы можете выполнять преобразования - теоретически вы можете многое настроить, если программа была правильно упакована поставщиком, вы можете сделать полностью автоматизированное развертывание без какого-либо взаимодействия с конечным пользователем - что очень полезно, когда вы хотите стандартизировать среду Windows и иметь больше, чем несколько компьютеров.
чтобы посмотреть, что люди делают с msis [или автоматическим развертыванием], посетите, например, этот сайт и его форумы.
источник