Установка SQL Server 2014 Express в качестве обязательного условия в Boostrapper

Я пытаюсь использовать Boostrapper (Wix 3.11) для настройки установки с использованием SQL Server 2014 Express в качестве предварительного условия.

Работает хорошо при установке setup.exe или же SQLEXPR_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: значение не может быть нулевым.
Имя параметра: 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>

Я пытался добавить Permachine="Yes" в строку ExePackage, но это не решает проблему.

Я также попытался щелкнуть правой кнопкой мыши установщик и запустить его от имени администратора, но он все еще не работает.

Надеюсь, кто-то может помочь мне с этим вопросом.

1 ответ

Решение

Давненько не смотрел на это, но, похоже, сейчас никого нет рядом. Я попробую: я полагаю, вы используете переменные препроцессора в вашем источнике, а не переменные времени выполнения. Другими словами "$(var.VariableName)" записи разрешаются во время сборки (when your WiX Bundle is compiled - which is sometimes OK) а не во время выполнения (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" />

Может быть, вы можете взглянуть на материал Нила Слайтхолма, чтобы найти идеи, как к этому подойти (у меня нет полностью рабочего образца, чтобы добавить его): 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 (внизу страницы по этой ссылке). Я никогда не пробовал это. Похоже, что эти элементы Variable разрешаются с использованием стандартного соглашения MSI-скобки: [InstallFolder], Образец:

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

Посмотрите шаблон Sleightholm снова для полного контекста для вышеупомянутых фрагментов. Вы будете использовать ExePackage вместо MsiPackage очевидно.

Похоже, вы можете игнорировать WixVariable element для вашего варианта использования (в отличие от Variable element который вам понадобится).

Другие вопросы по тегам