Определить, поддерживает ли MSI / EXE определенный флаг / аргумент? - PullRequest
7 голосов
/ 05 сентября 2011

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

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

Спасибо.

Ответы [ 3 ]

27 голосов
/ 16 марта 2012

Просто запустите программу установки с включенным ведением журнала, и он покажет вам все возможные параметры, которые принимает конкретный 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

3 голосов
/ 05 сентября 2011

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

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

1 голос
/ 23 сентября 2018

( Примечание : я опубликовал вариант этого ответа на обнаружение параметров 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, чтобы установка была для всех пользователей.

...