Azure DevOps中SSMClientToolsSetup@1任务报错:Windows Installer服务无法访问
问题概述
Azure流水线执行SSMClientToolsSetup@1任务时失败,核心报错为无法访问Windows Installer服务,进程msiexec.exe退出码1601。完整报错日志如下:
开始执行: SSMClientToolsSetup ============================================================================== 任务 : DigiCert One软件信任管理器客户端工具安装器 描述 : 安装用于DigiCert One软件信任管理器的客户端工具 版本 : 1.7.0 作者 : DigiCert 帮助文档 : ============================================================================== 使用路径 C:\azagent\A1\_work\_temp 待下载并使用的工具为 {},下载地址为 {} smtools-windows-x64.msi signingmanager/api-ui/v1/releases/noauth/smtools-windows-x64.msi/download 写入后的文件大小 96681984 执行命令: C:\Windows\system32\msiexec.exe /i C:\azagent\A1\_work\_temp\smtools-windows-x64.msi /quiet INSTALLDIR=C:\azagent\A1\_work\_temp\smtools-windows-x64 无法访问Windows Installer服务。这可能是因为Windows Installer未正确安装,请联系技术支持人员获取帮助。
执行STM安装任务时出错:错误:进程
'C:\Windows\system32\msiexec.exe' 退出码为1601
位于 ExecState._setResult (C:\azagent\A1_work_tasks\SSMClientToolsSetup_63dc66e6-daa5-4c1c-97f2-4312143a6d6c\1.7.0\node_modules\azure-pipelines-task-lib\toolrunner.js:942:25)
位于 ExecState.CheckComplete (C:\azagent\A1_work_tasks\SSMClientToolsSetup_63dc66e6-daa5-4c1c-97f2-4312143a6d6c\1.7.0\node_modules\azure-pipelines-task-lib\toolrunner.js:925:18)
位于 ChildProcess. (C:\azagent\A1_work_tasks\SSMClientToolsSetup_63dc66e6-daa5-4c1c-97f2-4312143a6d6c\1.7.0\node_modules\azure-pipelines-task-lib\toolrunner.js:838:19)
位于 ChildProcess.emit (events.js:198:13)
位于 maybeClose (internal/child_process.js:982:16)
位于 Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
##[错误]进程 'C:\Windows\system32\msiexec.exe' 退出码为1601 完成执行: SSMClientToolsSetup
已尝试以下方法但未解决问题:
- 在任务中设置
retryCountOnTaskFailure: 10 - 手动安装
smtools-windows-x64安装包 - 确认Windows Installer服务已启动,但服务会在一段时间后自动停止
- 重启服务器
- 命令行手动执行msiexec.exe命令可正常完成安装
解决方案
1. 配置Windows Installer服务为延迟自动启动
手动启动服务后自动停止,大概率是服务启动时机的问题,修改启动类型为延迟自动:
- 运行
services.msc打开服务管理器 - 找到Windows Installer服务
- 将启动类型改为自动(延迟启动)
- 启动服务后重新运行流水线任务
2. 修复Windows Installer组件
执行以下命令重新注册Windows Installer组件:
msiexec /unregister msiexec /regserver
执行完成后重启服务,再运行流水线。
3. 提升流水线任务的执行权限
Azure Agent默认服务账户可能缺少安装权限,可通过两种方式解决:
- 将Azure Agent服务的运行账户改为本地管理员账户
- 在流水线任务中添加
runAsAdmin: true参数,强制以管理员权限执行
4. 预安装SMTools到Agent机器
既然手动安装正常,可提前在Agent机器上完成安装,然后在流水线任务中跳过安装步骤:
- task: SSMClientToolsSetup@1 inputs: skipInstallation: true smToolsPath: 'C:\已安装的smtools路径'
5. 更新SSMClientToolsSetup任务版本
当前使用的是1.7.0版本,尝试升级到最新版本,新版本可能修复了服务依赖相关的bug。
内容的提问来源于stack exchange,提问作者Yash Dutt

