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

57

Каковы преимущества использования MSI-файлов перед обычными файлами setup.exe?

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

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

Какие-либо советы или хитрости при развертывании приложений .msi?

Фроде Лиллеруд
источник

Ответы:

42

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

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

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

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

Мэтт Хэнсон
источник
3
+1 - я не видел этого еще в '09 (я думаю, что сайт, возможно, еще тогда был в бета-версии), но мне нравится немного "... я почти всегда боюсь ...". Я полностью так себя чувствую (хотя, если честно, некоторые «MSI» заставляют меня чувствовать то же самое ... Java ... Google Chrome ...).
Эван Андерсон
74

ОБНОВЛЕНИЕ, июль 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 для системных администраторов:

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

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

Специальные инструкции:

Концептуальные темы / лучшие практики:

Штейн Осмул
источник
24

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


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

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

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

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

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

  • ошибки создания компонента (не следуя передовой практике). Это может вызвать проблемы с исправлениями и обновлениями с таинственными признаками, такими как отсутствующие файлы и настройки или исправления, которые выдают бессмысленные ошибки. Для упрощения следует использовать один файл на компонент, если количество файлов не очень велико.
  • обновить проблемы, связанные с перезаписью или сбросом пользовательских данных. Смотрите более подробную информацию ниже.
  • неправильное планирование пользовательских действий за пределами «транзакционного раздела» последовательностей установки или пользовательских действий неправильного типа размещаются неправильно. Это часто приводит к сбою действий (без повышенных прав) при удаленном запуске через системы развертывания, и откат эффективно ограничивается, потому что откат выполняется только для транзакций, совершенных транзакцией. Транзакция установщика Windows (например, фиксация транзакции базы данных) выполняется между стандартными действиями InstallInitialize и InstallFinalize в основной последовательности установки и выполняется с повышенными правами . Все изменения в системе должны произойти в этой транзакции - все остальное является ошибочным (но, к сожалению, довольно распространенным).
  • использование пользовательских действий в непосредственном режиме для внесения изменений в систему вне последовательности транзакционной установки . Это нарушает поддержку отката и обычно вызывает ошибки безопасности, поскольку настраиваемые действия в немедленном режиме не выполняются с повышенными правами пользователя, независимо от того, где они находятся в последовательности установки.
  • ошибочные конструкции, которые вызывают повторяющиеся циклы самовосстановления без видимой причины. Вот еще одна статья на эту тему, от installsite.org
  • Пользовательские действия, которые не подчиняются подавлению GUI в режиме автоматической установки, могут отображать модальные диалоговые окна, которые приводят к полному сбою развертывания при автоматическом запуске. Эта проблема наряду с общей разницей между тихим режимом и интерактивным режимом описана более подробно здесь (несколько многословно и многословно): удаление из панели управления отличается от удаления из .msi
  • некоторые пользовательские действия в ошибочно созданных пакетах вставляются только в последовательность интерфейса пользователя . Это приводит к тому, что они не запускаются в режиме без вывода сообщений. Это серьезно для корпоративного развертывания, поскольку установка без вывода сообщений используется здесь почти исключительно. Эта проблема также может повлиять на удаление, означающее, что вам может потребоваться запустить удаление в интерактивном режиме для удаления, чтобы обеспечить выполнение всех действий по очистке. Опять же, смотрите ссылку в предыдущем пункте для более подробного описания уровней пользовательского интерфейса.
  • установка содержит файлы, которые не предназначены для развертывания в том месте, куда они устанавливаются. Обычно системные файлы, которые должны быть установлены рядом в папке сборки winsxs.
  • низкая скорость установки - еще одна «проблема», о которой многие сообщают в MSI Вот несколько советов по этому вопросу . В целом, установщик Windows имеет некоторые накладные расходы из-за высоких требований регистрации в реестре для того, что устанавливается.
  • перезапись настраиваемой информации или общих файлов данных . Это может произойти, если файл INI установлен через таблицу файлов, а не таблицу IniFile, например. В последнем случае это рассматривается как «транзакция изменения», в первом случае это операция замены файла, что обычно неправильно, если в вашем INI-файле нет нестандартного форматирования или больших разделов комментариев, которые вы хотите развернуть вместе с вашим файлом (обычно это наверняка). инструменты разработчика).
  • что сложные правила для файла перезапись может привести файлы быть перезаписаны непреднамеренно или не обновляется вообще - это классический вопрос MSI. Прочтите эту статью, чтобы узнать, как принудительно перезаписать файл, который не будет обновляться . Правила могут быть слегка изменены с помощью пользовательских настроек свойства REINSTALLMODE, установленного на уровне командной строки msiexec.exe (перезаписать более старые версии, перезаписать одинаковые версии, перезаписать любую версию и т. Д.), И они работают по-разному для файлов данных и файлов с версиями. Подробности в SDK . Понимание этого имеет решающее значение, и этот проект часто осуждают, даже когда его понимают.
  • Самостоятельная регистрация COM-файлов во время установки может вызывать предупреждения безопасности или вызывать проблемы различными способами. Проверьте эту статью: Самостоятельная регистрация считается вредной .
  • Вариант с проблемой замены файлов - это случай, когда значительное обновление (которое удаляет и переустанавливает продукт) удаляет измененные файлы и переустанавливает версии по умолчанию. В этих случаях содержимое выглядит перевернутым или перезаписанным, когда на самом деле оно было сначала удалено, а затем переустановлено.
  • службы, работающие с пользовательскими учетными данными пользователя, могут потерять свои учетные данные во время основных сценариев обновления, а также иметь файл настроек (кажется,) вернуться к значению по умолчанию (они были действительно удалены и переустановлены). Для справки: на мой взгляд, сервисы, работающие с учетными данными пользователя, - это, в первую очередь, недостаток дизайна.
  • общедоступные свойства не передаются должным образом от клиента к процессу сервера, что препятствует выполнению пользовательских действий должным образом. Это включает в себя обновление свойства SecureCustomActionProperties.
  • Некоторые приложения не могут работать должным образом для других пользователей, кроме того, который изначально установил установку. Это серьезная ошибка проектирования, но обычно она может быть исправлена ​​опытными упаковщиками приложений, использующими самовосстановление или ActiveSetup для добавления ключей реестра HKCU и файлов userprofile . Это довольно сложный предмет, и для его работы может потребоваться немного черного искусства. Для справки: реальное решение, на мой взгляд, состоит в том, чтобы изменить само приложение, чтобы иметь возможность инициализировать все настройки для каждого пользователя на основе настроек по умолчанию и шаблонов, скопированных из местоположения для каждой машины или на основе внутренних настроек по умолчанию приложения (из исходный код).
  • Некоторые файлы MSI портят безопасность для установленных файлов , устанавливая полные права на чтение / запись для не администраторов здесь, там и везде. В других случаях приложение перестает работать на более новых версиях Windows из-за отсутствия разрешений. Упаковщики приложений довольно часто сталкиваются с анализом пользовательских требований приложения. Как правило, некоторые дополнительные разрешения требуются в HKLM или где-то в% ProgramFiles%
  • Некоторый ınstallshield расстановок обратно в тот же день будет пытаться подключиться к Интернету во время установки. Это ужасно для корпоративных сценариев развертывания, где развертывание строго контролируется, и установщику никогда не будет позволено загружать новый контент непосредственно из Интернета.
  • Другая сетевая проблема - когда установки пытаются показать графический интерфейс, где люди вводят данные, которые проверяются через Интернет, во время установки, или просто показывать живой контент со своего веб-сайта. Обычно это адреса электронной почты, контактная информация, лицензионные ключи и тому подобное. Соединение может полностью прерваться по многим причинам, часто из-за отсутствия конфигурации прокси-сервера в корпоративных средах (нет прямого соединения с Интернетом, весь интернет-трафик направляется через определенный сервер кэша, и каждый процесс должен предоставить учетные данные для прохождения через брандмауэр) , Вот статья об опасностях проверки лицензий с помощью установки .
  • 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 .

Штейн Осмул
источник
5

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

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

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

Уэйн Коортс
источник
2

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

Ян Келлинг
источник
0

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

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

PQD
источник