Определить, поддерживает ли MSI/EXE определенный флаг / аргумент?

Я создаю автообновление, которое может запускать MSI и EXE-файлы. Эти MSI/EXE не мои собственные. Я хотел бы использовать любой вариант автоматической установки / установки без вывода сообщений, если он существует. Есть ли какой-нибудь способ определить, есть ли в MSI/EXE какая-либо поддержка автоматической установки, и если да, получить правильный аргумент, чтобы я мог передать его в файл при запуске? Я знаю, что по умолчанию "/quiet" - это опция установки без вывода сообщений, но мне также любопытно узнать об EXE-файлах и любых MSI, которые, возможно, настроили эту опцию.

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

Благодарю.

3 ответа

Решение

Если это MSI, то параметры стандартные, вы можете получить список опций с msiexec /? или просмотреть документы на MSDN.

Там нет никакого способа определить параметры для произвольного EXE, какие параметры он поддерживает, если таковые имеются. Попробуйте найти документы от поставщика или попробуйте /? переключатель...

Просто запустите программу установки с включенным ведением журнала, и он покажет вам все возможные параметры, которые принимает конкретный MSI.

Например:msiexec /log logfile.txt /i installer.msi

Запустите весь установщик, и файл logfile.txt покажет вам передаваемые параметры как "Свойство (S)" или "Свойство (C)" с именем во всех заглавных буквах.

Источник: http://www.codeproject.com/Articles/16767/How-to-Pass-Command-Line-Arguments-to-MSI-Installe

(Примечание: я опубликовал вариант этого ответа в параметрах определения msi для вопроса об автоматической установке, о котором вы упоминали.)

Есть Lessmsi, это отличный инструмент, который, безусловно, работает здесь, если вы хотите использовать графический интерфейс и провести некоторое ручное исследование.

Вы можете попробовать следующую команду:

lessmsi l -tProperty <msi_name>

... Но вряд ли в вышеперечисленном будет все, что вы ищете.

Один из способов по существу гарантировать, что вы получите все возможные свойства, - это фактически выполнить установку, восстановление или удаление с помощью файла 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> могут отсутствовать некоторые свойства.

Следующая команда может эффективно создать файл журнала свойств для каждого файла MSI в некотором каталоге (используйте DIR /B скорее, чем DIR /B/S не регенерировать подкаталоги; удалить RD команда, если вы хотите сохранить извлеченные файлы):

cmd /C "FOR /F delims^=^| %G IN ('DIR /B/S "%DirToSearch%\*.msi"') DO msiexec /a "%G" /qr /lp! "%~nG_log.txt" TARGETDIR="%~dpnG_extract" && RD /S/Q "%~dpnG_extract""

и если вы хотите запустить его в PowerShell по какой-либо причине, используйте команду ниже:

cmd /C "FOR /F delims^=^| %G IN ('DIR /B/S ""%DirToSearch%\*.msi""') DO msiexec /a ""%G"" /qr /lp! ""%~nG_log.txt"" TARGETDIR=""%~dpnG_extract"" && RD /S/Q ""%~dpnG_extract"""

Как только процесс завершится, вы просто откроете файл журнала и заметите строки, начинающиеся с Property(S): / Property(C): как упоминал Джон Хиз.

Вообще говоря, параметры / свойства, которые могут быть установлены для установки, регистрируются во ВСЕХ CAPS; например, ALLUSERS можно установить ALLUSERS=1 так что установка для всех пользователей.

Другие вопросы по тегам