![如何自动执行 MSI 安装?](https://linux22.com/image/1265696/%E5%A6%82%E4%BD%95%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%20MSI%20%E5%AE%89%E8%A3%85%EF%BC%9F.png)
我有大约 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 的小实用程序,但有无数种方法可以做到这一点。但编写脚本的关键是能够识别应用程序是否正确安装,以便可以开始下一个安装。