非英文环境下使用Wix实现SQL 2019 Express无人值守安装的适配问题
SQL 2019 Express 多语言环境无人值守安装配置方案
方案1:直接在安装命令中使用SID(最简单,无需额外打包逻辑)
你之前直接写SID不生效是因为SQL安装程序默认会把输入值当做账户名称解析,需要加*前缀标识输入内容为SID,安装程序会自动根据当前系统语言转换为对应的本地化账户名:
- 内置管理员组SID:
S-1-5-32-544,参数值写为"*S-1-5-32-544" - NETWORK SERVICE账户SID:
S-1-5-20,参数值写为"*S-1-5-20"
修改后的完整安装命令如下:
/ACTION=Install /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /SECURITYMODE=SQL [SqlVariable] /TCPENABLED=1 /SQLSVCACCOUNT="*S-1-5-20" /SQLSVCSTARTUPTYPE=Automatic /SQLSYSADMINACCOUNTS="*S-1-5-32-544" /ADDCURRENTUSERASSQLADMIN=FALSE /Q /IAcceptSQLServerLicenseTerms
该方案支持SQL Server 2012及以上所有版本,适配任意语言系统
方案2:Wix打包阶段预解析SID获取本地账户名
如果需要兼容更低版本SQL,可在Wix打包逻辑中添加自定义动作,提前通过SID查询当前系统的对应账户名称,再代入安装命令:
- 引用Wix Util扩展,或添加PowerShell自定义动作执行以下命令获取账户名:
- 查管理员组名称:
(New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')).Translate([System.Security.Principal.NTAccount]).Value - 查NETWORK SERVICE名称:
(New-Object System.Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([System.Security.Principal.NTAccount]).Value
- 查管理员组名称:
- 将查询结果存储为Wix变量,替换安装命令中对应的账户参数即可。
内容的提问来源于stack exchange,提问作者evan
相关产品推荐
相关产品推荐

