1

在 Docker 容器 (image = mcr.microsoft.com/windows/servercore:ltsc2019) 中,我下载了 SQL Server Express 2019 安装程序。

我已经成功下载了 LocalDB msi:

SQL2019-SSEI-Expr.exe /Action=Download /MediaType=LocalDB /Quiet

文件下载到:

C:\Users\ContainerAdministrator\Downloads\en-us\SqlLocalDB.msi

但是...运行msiexec失败,没有任何错误消息。导航到上述路径后,我执行:

msiexec.exe /qb /i .\SqlLocalDB.msi IAcceptSqlLocalDBLicenseTerms=YES

该命令在零延迟后立即返回命令行。什么都没有安装。

我错过了什么?

编辑: 我正在尝试使用 LocalDB,因为这最终将成为 Azure Pipelines 构建代理。我们使用使用 LocalDB 的 Redgate 的“SqlChangeAutomation”powershell 工具。

编辑 2: 不确定这是否是进展,但是......我用 msiexec 记录了一下,发现我可以用/a标志运行它,而不是/i让它成功安装。

msiexec.exe /qn /a SqlLocalDB.msi IAcceptSqlServerLicenseTerms=YES /L*V "C:\installers\SQL\install.log"

然而不幸的是,在导航到C:\Program Files\Microsoft SQL Server\150\tools\binn并运行SqlLocalDB.exe info时,我得到了这个:

Call to LocalDBFormatMessage failed. Error code returned:
2311389462.
Error in LocalDBFormatMessage! Error code returned:
2311389462.
4

1 回答 1

1

SQL LocalDB 需要 Visual C++ 可再发行组件,否则很多事情都不会正确(我的问题是 SqlWriter 服务在安装期间根本不会创建)。

编辑:似乎我可以使用 Chocolatey 来安装 vc_redist 和旧版本的 localdb。(申请将 sqllocaldb 包更新到 2019 年的申请单)这样可以简化大多数人的工作。保留原始参数/命令以防万一。

我的精确参数的 powershell 步骤(假设您收集所需的文件):

  1. start-process .\VC_redist.x64.exe -Wait -ArgumentList @('/install','/norestart','/passive')注意我正在使用https://aka.ms/vs/16/release/vc_redist.x64.exe应该是 2019 的 redist,但是评论说我应该使用 SQL 安装程序包中的那个,或者一些 2015 版本。然而,这些都没有在容器中为我“工作”,但这可能是我错误地调用它们。除此之外,我需要安装的其他软件包无论如何都需要 2019 年。
  2. start-process msiexec -Wait -ArgumentList @('/i','SqlLocalDB.msi','/qn','/norestart','/L*V','install.log','IACCEPTSQLLOCALDBLICENSETE RMS=YES')请注意,“/i”而不是“/a”此时可以正常工作,并且“/norestart”选项。这是从choco localdb命令源中找到的。

有用的 powershell 片段来获取一些事件日志(将“系统”更改为“应用程序”),这有助于我解决问题,因为容器中没有事件查看器:get-eventlog -LogName System -After (Get-Date).AddMinutes(-5) | ? {-not $_.Source.Contains("DCOM") } |?{-not $_.Message.Contains("depends on the Background Tasks Infrastructure Service")}| Format-List这并从SqlLocalDB.msi 最终使我走上了正轨。

于 2021-01-17T07:04:04.977 回答