如何自动执行 MSI 安装?

如何自动执行 MSI 安装?

我有大约 20 个应用程序需要按特定顺序运行。我想为它们编写脚本,以便可以远程执行此操作。

每个应用程序都有一个Setup.exe和一个MSI。

我原本希望有一个简单的脚本,使用应答文件调用 MSI,但我已经好几年没这么做了。然而,我不记得如何创建应答文件。

这是个好方法吗?或者有更简单的方法吗?

答案1

谈论一个引导性问题...

首先,忽略 setup.exe。很可能它只是调用 MSI。或者有时他们会提取一堆东西然后调用 MSI,您通常可以在运行安装程序时查看临时目录并了解其正在做什么。

我总是偷懒,先试运行安装 ( msiexec /i path/to-install.msi /l*v /qn),然后打开日志,查看日志,挑选出我想要设置的属性,并通过命令行进行设置。应答文件从来都不起作用,或者不值得费尽心机制作它们。

然后我发现安装编辑并大量使用它。它可以让您编辑 MSI 的属性并生成一个 Transform,然后您可以将其作为参数传递到脚本中:msiexec /i path/to/installer.msi /t path/to/transform.mst 我建议先试一试,有一个免费版本可以完成几乎所有事情。

你也可以看看这里对于所有开关msiexec都有。

答案2

执行命令是您需要的工具。它有一个 -q 参数,可让它“安静”地安装东西:

/qn:不显示用户界面。

/qb:显示基本用户界面。

/qr:显示简化的用户界面,并在安装结束时显示模态对话框。

/qf:显示完整的用户界面,并在最后显示一个模态对话框。

/qn+ :不显示任何用户界面,除了最后显示的模式对话框。

/qb+ :显示基本用户界面,最后显示模态对话框。

/qb- :显示没有模态对话框的基本用户界面。

您还可以在命令行末尾提供命名选项(或“属性”);支持哪些属性取决于软件包。例如,此命令:

msiexec /qb /l* perl-log.txt /i ActivePerl.msi PERL_PATH=Yes PERL_EXT=Yes

...是您安装 ActiveState Perl 的方式,指示 MSI 包将 Perl.exe 添加到您的 PATH 并将 .pl 文件与其关联。(来源

答案3

大多数应用程序都可以静默安装,因此可以编写脚本。每个 Setup.exe 可以有多个潜在开关,因此必须致电供应商或搜索其网站。有时,您可以通过使用 /?、/h /help 开关启动安装程序来获取信息。MSI 文件也可以有任意数量的开关,但本文MSI 命令行参数提供了一份清单。

在编写该过程的脚本时,您可能会遇到使用 setup.exe 安装的应用程序,然后启动另一个文件(如 MSI)。一个例子是 MS Office XP。当发生这种情况时,您的脚本可能会认为您启动的文件已完成,并启动下一个安装,但安装失败,导致一切都失败。要解决这个问题,请尝试绕过安装文件,直接使用命令行选项进入实际安装程序(可能是 MSI)。如果这不可能,您可能需要创建某种计时器暂停。我曾经使用过在互联网上找到的一个名为 wait.exe 的小实用程序,但有无数种方法可以做到这一点。但编写脚本的关键是能够识别应用程序是否正确安装,以便可以开始下一个安装。

相关内容