Wix制作SQL Server多语言安装包时内置账户属性为空问题求助
问题原因
仅使用PropertyRef无法触发WiX对内置账户名的本地化查询逻辑,需要配合WixUtilExtension的相关配置才能正确获取到对应账户的本地化名称。
解决方案
引入WixUtilExtension依赖
- 若使用Visual Studio的WiX Toolset项目,右键项目「引用」,添加
WixUtilExtension引用 - 若使用命令行编译,链接阶段需添加参数:
light -ext WixUtilExtension.dll
- 若使用Visual Studio的WiX Toolset项目,右键项目「引用」,添加
添加UtilExtension命名空间
在.wxs源文件的根<Wix>节点上添加util命名空间声明:<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">替换原有的PropertyRef配置
把原有的两行<PropertyRef>替换为以下代码,触发WiX自动查询本地化账户名:<util:AccountProperty Id="WIX_ACCOUNT_ADMINISTRATORS" Name="Administrators" Domain="BUILTIN" /> <util:AccountProperty Id="WIX_ACCOUNT_NETWORKSERVICE" Name="NETWORK SERVICE" Domain="NT AUTHORITY" />修正InstallCommand的引号问题
原配置中SQLSYSADMINACCOUNTS参数没有包裹引号,当本地化名称带空格时会解析错误,修改为:/SQLSYSADMINACCOUNTS=&quot;[WIX_ACCOUNT_ADMINISTRATORS]&quot;
修正后完整代码片段
<Fragment> <util:AccountProperty Id="WIX_ACCOUNT_ADMINISTRATORS" Name="Administrators" Domain="BUILTIN" /> <util:AccountProperty Id="WIX_ACCOUNT_NETWORKSERVICE" Name="NETWORK SERVICE" Domain="NT AUTHORITY" /> <PackageGroup Id="SQLSERVER"> <ExePackage Id="Sql2019Express" DisplayName="SQL Server 2019 Express" Cache="yes" Compressed="yes" PerMachine="yes" Permanent="no" Vital="yes" Name="SQLEXPR_x64_ENU.exe" SourceFile="Resources\SQLEXPR_x64_ENU.exe" InstallCommand="/ACTION=Install /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /SECURITYMODE=SQL /SAPWD=[SqlVariable] /TCPENABLED=1 /SQLSVCACCOUNT=&quot;[WIX_ACCOUNT_NETWORKSERVICE]&quot; /SQLSVCSTARTUPTYPE=Automatic /SQLSYSADMINACCOUNTS=&quot;[WIX_ACCOUNT_ADMINISTRATORS]&quot; /ADDCURRENTUSERASSQLADMIN=FALSE /Q /IAcceptSQLServerLicenseTerms" UninstallCommand="/Action=Uninstall /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /Q "> <ExitCode Value ="3010" Behavior="forceReboot" /> </ExePackage> </PackageGroup> </Fragment>
验证方法
安装时添加/l*v install.log参数输出完整日志,搜索WIX_ACCOUNT_开头的属性,可确认是否已经正确获取到本地化的账户名称。
内容的提问来源于stack exchange,提问作者evan
相关产品推荐
相关产品推荐

