在Boostrapper中安装SQL Server 2014 Express作为先决条件

时间:2018-07-20 19:33:32

标签: sql-server wix sql-server-express

我正在尝试使用boostrapper(Wix 3.11)进行安装,并以SQL Server 2014 Express为前提。

当我通过命令行安装setup.exeSQLEXPR_x64_ENU.exe时,它运行良好。

命令行如下:

SQLEXPR_x64_ENU.exe /q /ACTION=Install /FEATURES=SQL 
       /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT="NT AUTHORITY\Network Service"  
       /SQLSYSADMINACCOUNTS="NT AUTHORITY\Network Service" 
       /AGTSVCACCOUNT="NT AUTHORITY\Network Service" 
       /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL SAPWD="TestPassWord"

但是,当我尝试从boostrapper运行它时,它失败了。它总是抛出相同的错误。

  

错误:操作“ Microsoft.SqlServer.Configuration.SetupExtension.ValidateFeatureSettingsAction”在执行期间引发了异常。
  Microsoft.SqlServer.Setup.Chainer.Workflow.ActionExecutionException:值不能为null。
  参数名称:userName ---> System.ArgumentNullException:值不能为空。

以下是我用于设置安装程序的代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"> 
      <?define Account = 'NT AUTHORITY\Network Service'?>
      <?define SAPassword = "TestPassWord"?>     
        <Bundle Name="Setup" Version="1.0.0.0" Manufacturer="Company" UpgradeCode="{GUID}">
            <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
        <bal:WixStandardBootstrapperApplication
            LicenseUrl=""
            ThemeFile="HyperlinkTheme.xml"
            LocalizationFile="HyperlinkTheme.wxl"
            SuppressOptionsUI="yes" />
        </BootstrapperApplicationRef>
            <Chain>
          <ExePackage Id ="SQL_express" SourceFile="$(var.PreReqPath)\SQLExpress\SQLEXPR_x64_ENU.exe" Compressed="yes" Vital="no" InstallCommand="/q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT=$(var.Account) /SQLSYSADMINACCOUNTS=$(var.Account) /AGTSVCACCOUNT=$(var.Account) /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL /SAPWD=$(var.SAPassword)" />
            </Chain>
        </Bundle>
</Wix>

我试图在ExePackage行中添加 Permachine =“ Yes” ,但这不能解决问题。

我还尝试右键单击安装程序并以管理员身份运行它,但仍然无法正常工作。

希望有人可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

好一阵子没看这个了,但是现在似乎没人在附近。我会尝试一下:我猜您在此处使用源代码中的 pre-processor variables ,而不是运行时变量。换句话说,"$(var.VariableName)"条目是在构建时when your WiX Bundle is compiled - which is sometimes OK)而不是运行时when your WiX Bundle is installed - which is often desired)处解析的

  

换句话说,我假设您的预处理程序变量解析为   在编译期间输入空白字符串,这就是为什么您的安装需要   不行。没有为所有预处理器字段指定任何值。

     

作为测试,可以使用一些硬编码的值将其捆绑包编译为“ smoke test”,以确定是否是这种情况。然后尝试下面所述的Variable element

样机

<ExePackage Id ="SQL_express" SourceFile="SQLEXPR_x64_ENU.exe" Compressed="yes" Vital="no" InstallCommand="/q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT=TestAccount /SQLSYSADMINACCOUNTS=SqlAccount /AGTSVCACCOUNT=SvcAccount /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL /SAPWD=SAPassword" />

也许您可以查看 Neil Sleightholm的博客,以获取一些解决此问题的想法(我没有要添加的完整示例): http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html

我认为关键是Variable element

<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]ACME\My App" />

通过将Overridable attribute设置为yes(该链接的页面底部),您似乎可以在命令行中覆盖这些值。我从来没有尝试过。看起来这些变量元素使用标准的MSI-brace约定[InstallFolder]进行解析。样本:

<MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" /> 

See Sleightholm's template again获取以上片段的完整上下文。显然,您将使用ExePackage而不是MsiPackage

看来您可以忽略用例中的WixVariable element(而不是您需要的Variable element)。