使用WiX Burn#EDIT3

时间:2016-06-29 22:51:54

标签: wix installer bundle command-line-arguments burn

WiX捆绑包不允许我以静默方式安装SqlLocalDB.msi并错误地说明以下内容:

  

缺少必需的IACCEPTSQLNCLILICENSETERMS = YES命令行参数。通过指定此参数,即表示您确认接受SQL Server 2016的最终用户许可条款。

我尝试通过执行以下操作来插入命令行参数。

<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
    <MsiProperty Name="CommandLineArgLocalDB" Value="IACCEPTSQLNCLILICENSETERMS=YES"/>
</MsiPackage>

我继续得到同样的错误。我的工作有什么问题吗?

编辑:

我发现MsiProperty主要用于传递命令行参数TO MY msi而不是内部msi。这不是我想要做的。

EDIT2:

我尝试过以赛亚的建议

    <MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>

但问题仍然存在。

签出日志后,我发现了这一行。

  

[0708:0C70] [2016-06-30T08:38:48] i301:应用执行包:SqlLocalDB.msi,action:Install,path:C:\ ProgramData \ Package Cache {E359515A-92E6-4FA3-A2C9 -E1BA02D8DE6E} v13.0.1601.5 \ SqlLocalDB.msi,参数:'ARPSYSTEMCOMPONENT =“1”MSIFASTINSTALL =“7”IACCEPTSQLNCLILICENSETERMS =“YES”'

这是不是意味着我已经在申请IACCEPTSQLNCLILICENSETERMS =“是”......?为什么我仍然无法正确安装?

可能是因为YES被引用所包围?

编辑3:

尝试做

    <MsiProperty Name="IACCEPTSQLNCLILICENSETERMS=YES"/>

但它给了我编译错误。

谢谢

4 个答案:

答案 0 :(得分:2)

你能试试吗?我现在无法测试,但我认为这应该可行。

<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
    <MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>

答案 1 :(得分:2)

所以我实际上在邮件列表上问了这个并得到答案。

<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
    <MsiProperty Name="ALLUSERS" Value="1"/>
    <MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>

只需添加ALLUSERS,MsiProperty解决了这个问题。 我希望错误表明不同的信息。

答案 2 :(得分:1)

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\12.0" Value="ParentInstance" Result="exists" Variable="Sql32"/>
<util:RegistrySearch Id="Sql64" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\12.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”,以确保它能够完成通常返回实例名称是“MSSQLLocalDB”

使用Windows 7的Sqllocaldb 2017会有问题,除非你安装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”

答案 3 :(得分:0)

请记住,较新的SqlLocalDB安装程序会要求您接受“ sqllocaldb”许可条款,因此请添加属性

<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />