Windows Installer(MSI)套件在单台设备上很容易安装,但要在数百台设备上执行 Windows Installer 静默安装,则需要使用正确的命令。幸运的是,由于 Windows Installer 套件共享一组标准的 msiexec 选项,每个 MSI 的核心命令都相同。
考虑到这一点,您可以在多台设备上运行 msiexec 静默安装命令。不过,正如那句老话所说,魔鬼藏在细节中。显示级别、重启行为、日志记录等因素都会影响 MSI 静默安装,并决定其成功还是失败。而且一旦失败,屏幕上不会显示任何内容,因此退出代码和日志就成了排查问题的唯一记录。
那么,如何才能正确执行 MSI 静默安装?下面来看看需要了解的开关参数、如何静默安装和卸载、如何修复常见故障等内容,帮助轻松高效地执行 MSI 静默安装。
用于静默 MSI 安装的 msiexec 安装命令
首先,我们来看一下 msiexec 安装命令,以及其中每一部分的含义。要通过 cmd 安装 MSI 软件包,请打开提升权限的命令提示符并运行以下 msi 安装 cmd:
msiexec /i "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-install.log"
当然,如果看不懂命令行语法,这些内容对您来说就毫无意义。所以,我们把它拆解成几个更容易理解的部分:
/i 用于安装该软件包。这是启动整个流程的初始命令;请务必在后面用引号加上完整路径,这样文件夹名称中的空格才不会导致命令出错。
/qn 表示该命令应在无用户界面的情况下运行。也可以使用 /quiet 作为等效选项。
/norestart 可阻止 Windows Installer 在安装完成后重启设备,即使安装包请求重启也不会执行。这有助于防止安装因最终用户的设备突然重启而中断工作。
/l*v 会将详细日志写入给定的路径。请记住,它指向的文件夹必须已存在。
请确保从提升权限的命令提示符运行该命令,这样它就不需要请求权限。静默安装无法显示 UAC 提示来请求管理员权限;否则,它就不是静默安装了。
如果使用的是 PowerShell,该怎么办?对此也有一个类似的脚本,不过有几个关键区别:
$p = Start-Process msiexec.exe -ArgumentList '/i "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-install.log"' -Wait -PassThru $p.ExitCode
在这种情况下,-Wait 参数会让脚本等待安装完成,而 -PassThru 会返回退出代码。
用于静默和无人值守安装的 MSI 开关
接下来,我们来分解一下静默和无人值守安装时需要了解的 MSI 开关。Microsoft 在其标准安装程序命令行选项中记录了完整列表。请记住,msiexec 选项不区分大小写,因此无论输入 /QN 还是 /qn,最终结果都相同。/quiet 开关就是大多数人所说的 msiexec 静默安装,而且 Microsoft 将其视为与 /qn 相同。
我们可以将这些开关分为三组:显示、重启和日志记录。每一项都是安装过程中的重要组成部分,并决定命令如何运行。
开关参数 | 组 | 作用 |
/quiet 或 /qn | 显示 | 完全没有用户界面 |
/qn+ | 显示 | 无界面,安装完成后会弹出一个对话框 |
/passive | 显示 | 仅显示进度条,无需用户输入 |
/qb | 显示 | 带进度条的基本界面 |
/qb! | 显示 | 隐藏“取消”按钮的基本界面 |
/norestart | 重启 | 安装后绝不重启 |
/promptrestart | 重启 | 询问用户是否需要重启 |
/forcerestart | 重启 | 安装后始终重启 |
/l*v "path" | 日志记录 | 所有内容的详细日志,写入该路径 |
/log "path" | 日志记录 | 与 /l* 相同(除详细和额外调试信息外的所有信息) |
如果要在大批设备上部署,/qn(或 /quiet)搭配 /norestart 是常见组合,而重启则由部署工具处理。对于需要让用户看到进度的安装,还应使用 /passive。
请注意,msiexec 没有 /s 或 /silent 开关,尽管 EXE 安装程序有。EXE 安装程序也没有统一的标准,因此可能会更复杂一些。
如何在静默安装中设置 MSI 属性和转换
如果想自定义应用程序安装包,就需要了解如何设置 MSI 属性和转换。除非命令行设置了这些自定义项,否则静默安装将使用安装包的默认设置,因此了解需要设置哪些内容很重要。
设置属性时,应将其放在开关后面,格式为 PROPERTY=VALUE。请注意,Windows Installer 会将属性名称视为大写,但属性值会保留原有大小写;如果值中包含空格,则应放在引号中。由于属性名称会因软件包而异,建议查阅供应商的部署文档来确认。
例如,设置 MSI 属性可能如下所示:
msiexec /i "C:\Installers\App.msi" /qn INSTALLDIR="D:\Apps\App" /l*v "C:\Logs\App-install.log"
然后是 transform。transform(.mst 文件)包含一组对安装包的更改,因此可以直接应用这些更改,而无需添加到命令行中。可以使用 TRANSFORMS 属性按如下方式添加它们:
msiexec /i "C:\Installers\App.msi" TRANSFORMS="C:\Installers\App.mst" /qn /l*v "C:\Logs\App-install.log"
如何静默卸载 MSI
当需要静默卸载 MSI 时,这个过程理应和安装它一样简单。IT 团队通常需要移除软件包,无论是为了给版本变更腾出空间、清理设备,还是删除失败的安装。
/x 命令用于删除软件包,同时接受与安装命令相同的显示、重启和日志记录开关。这既适用于原始 MSI 文件,也适用于产品代码,不过当设备上已不再有原始 MSI 时,后者会更有帮助。
静默卸载命令应如下所示:
msiexec /x "C:\Installers\App.msi" /qn /norestart /l*v "C:\Logs\App-uninstall.log"
或者:
msiexec /x {PRODUCT-CODE-GUID} /qn /norestart /l*v "C:\Logs\App-uninstall.log"
如何读取 msiexec 退出代码
使用 msiexec 时,需要了解退出代码。当 msiexec 完成任务时,它会返回一个退出代码,供脚本和部署工具读取,以判断安装程序是否成功运行、是否出现问题,或者是否需要重启。Microsoft 在其 MsiExec error messages reference 中列出了每个代码。
msiexec 的退出代码如下:
退出代码 | 含义 | 该怎么做 |
0 | 成功 | 无 |
3010 | 已成功,需要重启才能完成 | 安排重启。视为成功 |
1641 | 成功,安装程序已开始重启 | 视为成功。设备预计会重启 |
1603 | 安装期间发生致命错误 | 打开详细日志以查找原因 |
1618 | 另一个安装程序已在进行中 | 等待后重试 |
在某些情况下,脚本会将任何非零代码视为失败。在这些情况下,即使应用已正确安装,它也会将 3010 和 1641 代码标记为失败。因此,在将安装标记为失败之前,您需要先检查成功代码;有时只需重启即可完成安装。
静默 MSI 安装失败的原因及修复方法
有时,静默安装会失败。发生这种情况时,需要了解原因以及如何修复。虽然静默安装失败时不会向用户显示任何内容,但可以检查以下信息来了解更多详情:
1。安装时未使用管理员权限运行
静默安装仍然需要管理员权限才能运行,但如果缺少权限,它无法提示用户。请确保通过提升权限的命令提示符或具有管理员权限的部署工具运行安装,这样就不用担心权限不足的问题。
在 Windows 10 上,错误 1925 可能表示缺少管理员权限。
2. 日志文件夹不存在
Windows Installer 不会为日志文件创建文件夹。如果 /l*v 中指向的路径对应的文件夹不存在,日志文件将无法生成。请确保日志记录到始终存在的文件夹中,或在必要时创建一个文件夹。
3. 另一个安装已在运行
Windows Installer 一次只能运行一个安装程序。如果看到退出代码 1618,则表示安装程序正忙于处理另一个应用程序。幸运的是,这意味着只需等待另一个安装完成,然后重试安装即可。
4. 安装遇到致命错误
如果安装过程中遇到错误,仅凭退出代码无法说明具体是什么问题。在这种情况下,需要查看详细日志以获取更多信息。这就是为什么每个静默安装命令中都应包含 /l*v,这样一旦出现问题,就可以查看日志。
在多台设备上运行 msiexec 静默安装
如果要在企业环境中管理多台远程设备,就需要一种静默安装应用和更新的方法。同一个应用可能需要部署到数百台设备,因此,在一台测试机器上可用的命令还只是个开始。
可以通过多种方式在多台设备上运行 msiexec 静默安装,包括:
通过 Microsoft Intune 部署 MSI
如果使用 Microsoft Intune,可以用它通过两种不同方式部署 MSI。
Intune 可以将 MSI 作为业务线 (LOB) 应用进行部署,但这只接受一个命令行参数。如果需要更多参数,则应使用 Win32 应用管理,此时 MSI 会被封装为 .intunewin文件,而 msiexec 命令会成为该应用的安装命令。
请注意,在 Windows Autopilot 注册期间混合安装 Win32 和 LOB 应用可能会导致安装失败,因为它们会同时使用 Trusted Installer 服务。
使用脚本或端点管理远程运行安装
如果未使用 Intune,可以通过 PowerShell、远程访问会话或端点管理工具来运行命令。例如,Splashtop AEM(Autonomous Endpoint Management)可以在受管端点上运行脚本并自动执行补丁管理,包括静默安装以及安排在方便时间进行的更新。如需完整操作说明,请参阅我们的指南:如何在远程计算机上静默安装软件。
工作最容易堆积的地方
运行命令是最简单的部分。应用数量以及每个应用所需的工作量都会让这件事变得困难。
每个应用都需要各自的属性和转换,必须在干净的设备上进行测试,需要有办法确认安装可正常运行,等等。每个新版本都必须重复这一过程。如果没有自动化,就会持续产生大量手动工作,而未 经测试的安装包还可能导致多台设备出现故障。
Splashtop Agentic Packr 可为每个应用及其版本自动完成打包和测试工作。
使用 Agentic Packr 构建经过测试的静默安装包
构建、测试和静默安装软件包不必是一个耗时的手动过程。借助 Splashtop Agentic Packr,可以通过智能化、自动化的打包与安装,减轻 IT 团队的负担。
Splashtop Agentic Packr 是一款由 AI 驱动的应用打包工具,可分析安装程序、构建包含安装逻辑的软件包,并在干净的虚拟机上进行测试。它还会编写用于确认每次安装均已成功的检测规则。每个软件包都会经过检查和安全扫描,以确保其正常运行,并附带 QA 评分卡和日志,方便 IT 团队在发布前审查所有内容。
每当有新更新发布时,Splashtop Agentic Packr 都可以自动构建更新后的套件,免去 IT 团队手动处理每次发布的工作。Splashtop Agentic Packr 可以构建 Intune 套件并将其发布到 Intune,或者打包安装程序以通过 SCCM 或在任何 Windows 设备上手动运行,使其成为用于静默安装和更新的灵活工具。它还可让您控制最终用户会看到什么,包括重启提示、安装延后和宽限期。
Splashtop Agentic Packr 负责构建和测试软件包,Splashtop AEM 则可在各个端点上运行部署和脚本。
了解 Splashtop Agentic Packr 如何为每个应用构建、测试并发布静默安装包。




