Определить параметры MSI для автоматической установки
У меня есть MSI-пакет, в котором есть возможность установить два разных языка. Есть ли способ определить параметр, отвечающий за выбор языка, чтобы я мог использовать командную строку для автоматической установки пакета (автоматическая установка)?
Спасибо
2 ответа
Обычный способ сделать что-то с MSI - любое свойство в таблице свойств, полностью названное заглавными буквами, считается публичным внешним свойством. Это означает, что его можно установить, когда вы запускаете MSI из командной строки.
Поэтому, если вы решите, как вы хотите пометить свой выбор языка, укажите для него свойство, а затем вы можете связать установку компонентов или функций внутри MSI с этим флагом / переменной.
Так что, если вы еще не знакомы с концепциями, ознакомьтесь с компонентами, функциями и свойствами MSI. Вы не упоминаете, какой компоновщик MSI вы используете - если вы используете тот, который поставляется с Visual Studio, я не знаю, способен ли он предоставить вам доступ к компонентам и функциям, но есть один или два недорогих или бесплатные (то есть Wix) альтернативы, которые делают (если вы используете что-то правильное, такое как Wise или InstallShield, тогда у вас есть полный контроль над всеми этими вещами).
Редактировать: вот ссылка на скрипт, который будет извлекать список общедоступных свойств для вас (нажмите на текст Get MSI-File properties.vbs, чтобы увидеть скрипт). Кроме того, как я могу увидеть, какие общедоступные свойства доступны? Извлечение свойств из файла MSI без установки может предоставить вам некоторые другие возможности.
Ребята из ServerFault, вероятно, смогут гораздо больше помочь с этим, я знаю, что есть некоторые инструменты администратора Windows, которые позволяют вам разбирать и / или оборачивать MSis, но я не могу вспомнить, как они называются.
(Примечание: я опубликовал вариант этого ответа на другом сайте StackExchange для аналогичного вопроса.)
Lessmsi - отличный инструмент, который наверняка сработает, если вы захотите открыть его графический интерфейс и провести ручное исследование.
Если вы ищете быстрое решение, вы можете попробовать:
lessmsi l -tProperty <msi_name>
К сожалению, вполне вероятно, что приведенная выше команда не выведет свойства, которые вы ищете (sidenote: выходные данные отформатированы в CSV).
Один из способов по существу гарантировать, что вы получите все возможные свойства, - это фактически выполнить установку, восстановление или удаление с помощью файла MSI и зарегистрировать процесс. Следующая команда записывает только свойства и ничего больше:
<msi_name> /lp! <msi_property_logfile>
Вышеуказанная команда эквивалентна:
msiexec /lp! <msi_property_logfile> /i <msi_name>
Мой предпочтительный метод, однако, заключается в том, чтобы на самом деле не устанавливать / удалять / восстанавливать (а просто извлекать). Преимущества этого метода по сравнению с lessmsi состоят в том, что для него не требуется сторонняя утилита (например, lessmsi) и не требуется возиться с какими-либо установками. Учитывая, что у вас достаточно дискового пространства для фактической установки программы, вы можете сделать:
msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>
Обратите внимание, что <absolute_path_to_extract_to>
может указывать на несуществующий каталог (команда создаст необходимые каталоги или потерпит неудачу).
Если по какой-либо причине вы ненавидите пользовательский интерфейс установки, вы можете добавить /qr
опция, которая "уменьшит" и, возможно, исключит пользовательский интерфейс без ущерба для процесса регистрации свойств. Однако будьте осторожны - если вы идете "ниже", чем сокращенный пользовательский интерфейс (а именно /qb
| /passive
или же /qn
| /quiet
), ваш <msi_property_logfile>
могут отсутствовать некоторые свойства.
Как только процесс завершится, вы просто откроете файл журнала и заметите строки, начинающиеся с Property(S):
/ Property(C):
, Вообще говоря, параметры / свойства, которые могут быть установлены для установки, регистрируются во ВСЕХ CAPS; например, ALLUSERS
можно установить ALLUSERS=1
так что установка для всех пользователей.
Таким образом, для только что приведенного примера установка в автоматическом режиме может выглядеть примерно так:
msiexec /i <msi_name> /passive ALLUSERS=1