确定MSI / EXE是否支持某些标志/参数?

时间:2011-09-04 21:31:20

标签: windows-installer exe unattended-processing

我正在创建一个可以运行MSI和EXE的自动更新程序。这些MSI / EXE不是我自己的。我想使用任何无人值守/静默安装选项(如果存在)。有没有办法确定MSI / EXE是否具有某种无人值守的安装支持,如果是,请获取正确的参数,以便在运行时将其传递给文件?我知道,默认情况下'/ quiet'是静默安装选项,但我也对EXE和任何可能已经自定义此选项的MSI感到好奇。

这个问题 - detect msi parameters for unattended install - 是类似的,但答案中的链接被打破了,我无法从答案中弄清楚我会做什么。

感谢。

3 个答案:

答案 0 :(得分:27)

只需在启用日志记录的情况下运行安装程序,它就会显示特定MSI接受的所有可能参数。

例如: msiexec /log logfile.txt /i installer.msi

运行整个安装程序,logfile.txt将显示可通过的参数为“Property(S)”或“Property(C)”,其名称为全部大写。

来源: http://www.codeproject.com/Articles/16767/How-to-Pass-Command-Line-Arguments-to-MSI-Installe

答案 1 :(得分:3)

如果是MSI,则参数是标准参数,您可以使用msiexec /?获取选项列表或查看the docs on MSDN

没有办法检测任意EXE的选项,它支持哪些选项,如果有的话。尝试从供应商处查找文档,或尝试/?切换...

答案 2 :(得分:0)

注意:我在您提到的detect msi parameters for unattended install问题上发布了此回复的变体。)

这里有lessmsi,这是一个很棒的工具,如果您愿意使用GUI并进行一些手动调查,那么肯定可以在这里使用。

您可以尝试以下命令:

lessmsi l -tProperty <msi_name>

...但是以上内容不太可能满足您的所有需求。

一种基本保证您拥有所有可能属性的方法是使用MSI文件实际执行安装,修复或卸载并按照Jon Heese's answer中所述记录过程。

如果要在日志文件中筛选较少的文本,可以将日志设置设置为仅记录属性:

<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>可以指向不存在的目录(该命令将创建必要或失败的目录)。

如果您出于任何原因而讨厌安装UI,则可以附加/qr选项,该选项将“减少”并消除该UI,而不会影响属性记录过程。不过请注意-如果您的界面比精简的用户界面“更低”(即/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):开头的行,如Jon Heese所述。

通常来说,可以为安装设置的参数/属性记录在ALL CAPS中;例如,可以将ALLUSERS设置为ALLUSERS=1,以使安装适用于所有用户。