Определить, поддерживает ли 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
так что установка для всех пользователей.