使用 WiX Burn 静默安装 SqlLocalDB.msi #EDIT3
Install SqlLocalDB.msi silently with WiX Burn #EDIT3
WiX 捆绑包不允许我静默安装 SqlLocalDB.msi 并且出现以下错误:
The required IACCEPTSQLNCLILICENSETERMS=YES command-line parameter is missing. By specifying this parameter, you acknowledge that you accept the end user license terms for SQL Server 2016.
我尝试通过执行以下操作来插入命令行参数。
<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
<MsiProperty Name="CommandLineArgLocalDB" Value="IACCEPTSQLNCLILICENSETERMS=YES"/>
</MsiPackage>
我继续收到同样的错误。我做的有什么问题吗?
编辑:
我发现 MsiProperty 主要用于将命令行参数传递给我的 msi 而不是内部 msi。那不是我想做的。
编辑2:
我试过以赛亚的建议
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
但问题依然存在。
查看日志后,我找到了这一行。
[0708:0C70][2016-06-30T08:38:48]i301: Applying execute package: SqlLocalDB.msi, action: Install, path: C:\ProgramData\Package Cache{E359515A-92E6-4FA3-A2C9-E1BA02D8DE6E}v13.0.1601.5\SqlLocalDB.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" IACCEPTSQLNCLILICENSETERMS="YES"'
这是否意味着我已经在应用 IACCEPTSQLNCLILICENSETERMS="YES"...?为什么我仍然无法正确安装它?
可能是因为 YES 被引号包围了?
编辑 3:
尝试过
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS=YES"/>
但它给我编译器错误。
谢谢
你能试试这个吗?我现在无法对此进行测试,但我认为这应该可行。
<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>
所以我实际上在邮件列表上问了这个问题并得到了答案。
<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
<MsiProperty Name="ALLUSERS" Value="1"/>
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>
只需添加 ALLUSERS MsiProperty 即可解决问题。
我希望错误指示不同的消息。
WIX V4
将 WixUtilExtension 添加到您的项目引用中,然后在 Wix 标签内添加以下行
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util"
添加这个来检查它是否已经安装
<util:RegistrySearch Id="Sql32" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions.0" Value="ParentInstance" Result="exists" Variable="Sql32"/>
<util:RegistrySearch Id="Sql64" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions.0" Value="ParentInstance" Result="exists" Variable="Sql64" Win64="yes"/>
然后在Chain标签中添加
<MsiPackage Id="SqlLocalDB2014x32" SourceFile="..\..\Prerequisites\SqlLocalDB-x32.msi" Permanent="yes" ForcePerMachine="yes" Vital="no" DisplayInternalUI="no" InstallCondition="NOT (Sql32)">
<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
</MsiPackage>
<MsiPackage Id="SqlLocalDB2014x64" SourceFile="..\..\Prerequisites\SqlLocalDB-x64.msi" Permanent="yes" ForcePerMachine="yes" Vital="no" DisplayInternalUI="no" InstallCondition="NOT (Sql64)">
<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
</MsiPackage>
32 位版本无法在 64 位系统中运行,它会显示错误提示,但引导程序应该可以继续正常运行
该程序不会出现在控制面板的已安装程序列表中,可能需要重新启动系统才能在 windows 8 和 10 上运行,在 CMD 或 PowerShell 中键入 "sqllocaldb info"确保它确实应该 return 实例名称通常是 "MSSQLLocalDB"
Sqllocaldb 2017 with windows 7 会有问题,除非你安装 dot net core sdk v2(不要自己测试我使用的是 sqllocaldb 2014)
Error when start an instance of SQLLOCQLDB 2017 on windows 7 64bit (entry point not found except)
别忘了改"SourceFile"
请记住,较新的 SqlLocalDB 安装程序会要求您接受 'sqllocaldb' 许可条款,因此请添加 属性
<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
WiX 捆绑包不允许我静默安装 SqlLocalDB.msi 并且出现以下错误:
The required IACCEPTSQLNCLILICENSETERMS=YES command-line parameter is missing. By specifying this parameter, you acknowledge that you accept the end user license terms for SQL Server 2016.
我尝试通过执行以下操作来插入命令行参数。
<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
<MsiProperty Name="CommandLineArgLocalDB" Value="IACCEPTSQLNCLILICENSETERMS=YES"/>
</MsiPackage>
我继续收到同样的错误。我做的有什么问题吗?
编辑:
我发现 MsiProperty 主要用于将命令行参数传递给我的 msi 而不是内部 msi。那不是我想做的。
编辑2:
我试过以赛亚的建议
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
但问题依然存在。
查看日志后,我找到了这一行。
[0708:0C70][2016-06-30T08:38:48]i301: Applying execute package: SqlLocalDB.msi, action: Install, path: C:\ProgramData\Package Cache{E359515A-92E6-4FA3-A2C9-E1BA02D8DE6E}v13.0.1601.5\SqlLocalDB.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" IACCEPTSQLNCLILICENSETERMS="YES"'
这是否意味着我已经在应用 IACCEPTSQLNCLILICENSETERMS="YES"...?为什么我仍然无法正确安装它?
可能是因为 YES 被引号包围了?
编辑 3:
尝试过
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS=YES"/>
但它给我编译器错误。
谢谢
你能试试这个吗?我现在无法对此进行测试,但我认为这应该可行。
<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>
所以我实际上在邮件列表上问了这个问题并得到了答案。
<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
<MsiProperty Name="ALLUSERS" Value="1"/>
<MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>
只需添加 ALLUSERS MsiProperty 即可解决问题。 我希望错误指示不同的消息。
WIX V4
将 WixUtilExtension 添加到您的项目引用中,然后在 Wix 标签内添加以下行
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util"
添加这个来检查它是否已经安装
<util:RegistrySearch Id="Sql32" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions.0" Value="ParentInstance" Result="exists" Variable="Sql32"/>
<util:RegistrySearch Id="Sql64" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions.0" Value="ParentInstance" Result="exists" Variable="Sql64" Win64="yes"/>
然后在Chain标签中添加
<MsiPackage Id="SqlLocalDB2014x32" SourceFile="..\..\Prerequisites\SqlLocalDB-x32.msi" Permanent="yes" ForcePerMachine="yes" Vital="no" DisplayInternalUI="no" InstallCondition="NOT (Sql32)">
<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
</MsiPackage>
<MsiPackage Id="SqlLocalDB2014x64" SourceFile="..\..\Prerequisites\SqlLocalDB-x64.msi" Permanent="yes" ForcePerMachine="yes" Vital="no" DisplayInternalUI="no" InstallCondition="NOT (Sql64)">
<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
</MsiPackage>
32 位版本无法在 64 位系统中运行,它会显示错误提示,但引导程序应该可以继续正常运行
该程序不会出现在控制面板的已安装程序列表中,可能需要重新启动系统才能在 windows 8 和 10 上运行,在 CMD 或 PowerShell 中键入 "sqllocaldb info"确保它确实应该 return 实例名称通常是 "MSSQLLocalDB"
Sqllocaldb 2017 with windows 7 会有问题,除非你安装 dot net core sdk v2(不要自己测试我使用的是 sqllocaldb 2014) Error when start an instance of SQLLOCQLDB 2017 on windows 7 64bit (entry point not found except)
别忘了改"SourceFile"
请记住,较新的 SqlLocalDB 安装程序会要求您接受 'sqllocaldb' 许可条款,因此请添加 属性
<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />