跳到正文

Setup.exe 静默安装:/S 参数、自定义目录与批量部署

如何用 /S 静默运行基于 NSIS 的 Setup.exe,用 /D= 指定安装目录,静默卸载,并通过 Intune、PDQ 或脚本批量部署安装程序。

更新于 2026年10月31日 · 阅读约 3 分钟

IT 团队不会一步步点击安装向导。他们通过脚本或部署工具运行安装程序,并期望它自行完成。ExeTup 生成的每一个安装程序都是 NSIS 安装程序,而 NSIS 支持静默安装已有数十年。本指南介绍相关参数、常见陷阱,以及主流部署工具如何调用它们。

参数

Setup.exe /S

按照构建时设定的默认值进行安装:默认目录、快捷方式、所选的安装范围。不会出现任何窗口。该参数区分大小写:是 /S,不是 /s。

Setup.exe /S /D=C:\Apps\My App

安装到另一个目录。/D= 的规则:

  • 它必须是命令行上的最后一个参数;
  • 路径不加引号,即使包含空格;
  • 它同样区分大小写。

静默卸载:

"C:\Program Files\My App\unins000.exe" /S

卸载程序名为 unins000.exe,位于安装目录中,并会注册到设置 → 应用,因此 winget uninstall 和大多数部署工具也能找到它。

静默安装仍会做什么

  • 按构建时的选择,为所有用户安装(安装到 Program Files,需要提权)或仅为当前用户安装。在未提权的命令提示符中静默运行按机器安装的安装程序会悄无声息地失败;请在提权的 shell 或部署工具的系统上下文中运行。
  • 如果启用了开始菜单和桌面快捷方式,则会创建它们。
  • 在 Windows 设置中注册卸载程序和版本号。
  • 不会在安装后启动应用,即使开启了"安装后启动"。静默模式下会跳过该页面。
  • 配置了多种语言时使用第一种语言;语言选择对话框会被跳过。

退出代码

静默安装成功时以 0 退出。非零代码表示安装被中止,最常见的原因是提权被拒绝或安装程序已在运行。脚本应当检查该代码:

Setup.exe /S
if %errorlevel% neq 0 exit /b %errorlevel%

在 PowerShell 中,使用 Start-Process -Wait -PassThru 并读取 .ExitCode,否则 Setup.exe 会立即返回:

$p = Start-Process -FilePath ".\Setup.exe" -ArgumentList "/S" -Wait -PassThru
exit $p.ExitCode

部署工具

  • Microsoft Intune:打包为 Win32 应用(.intunewin),安装命令为 Setup.exe /S,卸载命令为 "%ProgramFiles%\My App\unins000.exe" /S。使用 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\My App 下的注册表项或主 .exe 作为检测规则。
  • PDQ Deploy、ManageEngine、Chocolatey:一个在系统上下文中运行 Setup.exe /S 的"安装"步骤。
  • 组策略:GPO 软件安装需要 MSI 文件。请改用运行 Setup.exe /S 的启动脚本。
  • winget:清单中的 InstallerType: nullsoft 会告诉 winget 使用哪些参数;安装程序必须托管在稳定的 URL 上。

升级

在已安装的版本上运行更新的 Setup.exe /S 会就地替换文件,并更新 Windows 设置中的版本号。用户应先关闭应用;正在运行的 .exe 无法被覆盖。

常见问题

参数是 /S 还是 /silent?

/S,大写。NSIS 安装程序会忽略 /silent 和 /verysilent,这两个参数属于 Inno Setup。

可以传入含空格的目录吗?

可以,不加引号:Setup.exe /S /D=C:\Program Files\My App。/D= 参数必须是命令行上的最后一项。

静默安装需要管理员权限吗?

仅对为所有用户构建的安装程序需要。按用户安装的安装程序无需提权即可静默运行,这在用户不是管理员的受管笔记本电脑上非常实用。

卸载程序在哪里?

在安装目录中的 unins000.exe。它接受同样的 /S 参数进行静默卸载。

相关指南