使用 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" />