9

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

这个问题 -检测无人值守安装的 msi 参数- 类似,但答案中的链接已损坏,我无法从答案中弄清楚我会做什么。

谢谢。

4

3 回答 3

39

只需在打开日志的情况下运行安装程序,它就会向您显示特定 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

于 2012-03-15T22:50:35.870 回答
5

如果是 MSI,那么参数是标准的,您可以通过MSDNmsiexec /?获取选项列表或查看文档。

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

于 2011-09-05T07:57:32.680 回答
2

注意:我在您提到的无人值守安装问题的检测 msi 参数上发布了此响应的变体。)

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

您可以尝试以下命令:

lessmsi l -tProperty <msi_name>

...但上述内容不太可能拥有您正在寻找的一切。

从本质上保证您获得所有可能属性的一种方法是使用 MSI 文件实际执行安装、修复或卸载,并按照Jon Heese 的回答中提到的那样记录该过程。

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

<msi_name> /lp! <msi_property_logfile>

或者

msiexec /lp! <msi_property_logfile> /i <msi_name>

我更喜欢通过“提取”绕过安装/删除/修复需要的方法。这种方法相对于lessmsi的优点是它不需要 3rd-party 实用程序(即lessmsi),并且不需要您搞乱任何安装。您确实需要有足够的磁盘空间来实际安装程序(为了安全起见,可能还需要一些额外的空间)。然后您可以执行以下操作:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

请注意,<absolute_path_to_extract_to>可以指向一个不存在的目录(该命令将创建必要的目录,否则将失败)。

如果您出于某种原因讨厌安装 UI,则可以附加该/qr选项,这将“减少”并可能消除 UI,而不会影响属性记录过程。但是请注意 - 如果您“低于”简化的 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 所提到的。

一般来说,可以为安装设置的参数/属性以全部大写形式记录;例如,ALLUSERS可以设置ALLUSERS=1为所有用户安装。

于 2018-09-23T03:17:01.837 回答