Установите SqlLocalDB.msi в автоматическом режиме с помощью WiX Burn #EDIT3

Пакет WiX не позволяет мне установить SqlLocalDB.msi в автоматическом режиме и выдает следующие ошибки:

Отсутствует обязательный параметр командной строки IACCEPTSQLNCLILICENSETERMS=YES. Указав этот параметр, вы подтверждаете, что принимаете условия лицензии конечного пользователя для 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: Применение пакета выполнения: SqlLocalDB.msi, действие: Установить, путь: 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"/>

но это дает мне ошибку компилятора.

Спасибо


person ShinT    schedule 29.06.2016    source источник


Ответы (4)


Вы можете попробовать это? Я не могу проверить это сейчас, но я думаю, что это должно работать.

<MsiPackage SourceFile="SqlLocalDB.msi" Vital="yes" DisplayInternalUI="no">
    <MsiProperty Name="IACCEPTSQLNCLILICENSETERMS" Value="YES"/>
</MsiPackage>
person Isaiah4110    schedule 30.06.2016
comment
Спасибо за предложение. Я тоже это пробовал. Но не повезло. Должно быть что-то другое... - person ShinT; 30.06.2016

Так что я на самом деле спросил об этом в списке рассылки и получил ответ.

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

Просто добавление ALLUSERS MsiProperty решило проблему. Я хочу, чтобы ошибка указывала другое сообщение.

person ShinT    schedule 30.06.2016
comment
Не используйте свойство ALLUSERS. Вместо этого установите для атрибута ForcePerMachine MsiPackage значение yes. - person Sean Hall; 14.07.2016
comment
Похоже, такой подход работает хорошо. Спасибо. Для справки в будущем, почему принудительное использование каждой машины лучше, чем использование всех пользователей? - person ShinT; 16.07.2016
comment
ALLUSERS принципиально меняет способ установки пакета, v4 не позволяет устанавливать такие свойства - github.com/wixtoolset/issues/issues/5293. - person Sean Hall; 19.07.2016

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, введите «sqllocaldb info» в CMD или PowerShell, чтобы убедиться, что она действительно должна вернуть экземпляр имя обычно это "MSSQLLocalDB"

Sqllocaldb 2017 с Windows 7 будет иметь проблемы, если вы не установите dot net core sdk v2 (не проверяйте это сами, я использую sqllocaldb 2014) Ошибка при запуске экземпляра SQLLOCQLDB 2017 в 64-разрядной версии Windows 7 (точка входа не найдена, за исключением)

Не забудьте изменить "SourceFile"

person ahmedpio    schedule 27.02.2018

Имейте в виду, что более новые установщики SqlLocalDB просят вас принять условия лицензии sqllocaldb, поэтому добавьте свойство

<MsiProperty Name="IACCEPTSQLLOCALDBLICENSETERMS" Value="YES" />
person WebDrive    schedule 23.07.2020