在boostrapper中安装SQL Server 2014 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 AUTHORITYNetwork Service"  
/SQLSYSADMINACCOUNTS="NT AUTHORITYNetwork Service" 
/AGTSVCACCOUNT="NT AUTHORITYNetwork Service" 
/IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL SAPWD="TestPassWord"

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

错误:操作"Microsoft.SqlServer.Configuration.SetupExtension.ValideFeatureSettingsAction"在执行过程中引发异常
Microsoft.SqlServer.Setup.Chainer.Workflow.ActionExecutionException:值不能为null
参数名称:userName--->System.ArgumentNullException:值不能为null。

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

<?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 AUTHORITYNetwork 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)SQLExpressSQLEXPR_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>

我曾尝试将Permachine="Yes">添加到ExePackage行,但这并不能解决问题。

我还试着右键单击安装程序并以管理员身份运行它,但它仍然不起作用。

希望有人能帮我解决这个问题。

已经有一段时间没有看到这个了,但现在似乎没有其他人在身边。我试试看:我猜您在源代码中使用的是预处理器变量,而不是运行时变量建时(when your WiX Bundle is compiled - which is sometimes OK(解析,而不是在runtime时解析(when your WiX Bundle is installed - which is often desired(。

换句话说,我假设您的预处理器变量决心编译期间为空字符串,这就是为什么您的安装会不起作用。没有为所有预处理器字段指定任何值。

作为一项测试,也许可以用一些硬编码的值编译您的捆绑包作为"烟雾测试",以确定情况是否如此。然后尝试下面描述的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]ACMEMy App" />

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

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

请再次参见Sleightholm的模板以获取上述片段的完整上下文。很明显,您将使用ExePackage而不是MsiPackage

对于您的用例,您似乎可以忽略WixVariable element(而不是您需要的Variable element(。

最新更新