我正在创建一个可以运行MSI和EXE的自动更新程序。这些MSI / EXE不是我自己的。我想使用任何无人值守/静默安装选项(如果存在)。有没有办法确定MSI / EXE是否具有某种无人值守的安装支持,如果是,请获取正确的参数,以便在运行时将其传递给文件?我知道,默认情况下'/ quiet'是静默安装选项,但我也对EXE和任何可能已经自定义此选项的MSI感到好奇。
这个问题 - detect msi parameters for unattended install - 是类似的,但答案中的链接被打破了,我无法从答案中弄清楚我会做什么。
感谢。
答案 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
,以使安装适用于所有用户。