Предварительные требования ClickOnce: где находится SQL Server Express 2014 LocalDB?

Я создаю установщик clickonce для своего приложения wpf из Visual Studio 2013 Community edition. Это приложение использует localdb. Он отлично работает на целевых машинах, если я вручную устанавливаю sqlserver express 2014 LocalDB.

Но я хотел бы включить установщик для SQL Server Express 2014 LocalDB в мое развертывание clickonce.

Однако когда я открываю диалоговое окно с предварительными требованиями, доступен только SQL Server 2012 Express LocalDB (см. Изображение). Я попытался выбрать «2012», но он несовместим с файлом mdf, который мой установщик помещает в папку данных.

Возникает вопрос: Как включить установщик SQL Server Express 2014 LocalDB в качестве предварительного условия? Есть ли способ просто перетащить куда-нибудь файл MSI и заставить его работать? Или будет проще придерживаться 2012 года?

Предварительные требования для проекта VS


person Angelo    schedule 23.04.2015    source источник


Ответы (4)


Как я писал на Форумы MSDN Я создал свой собственный пакет, так как официальной версии не существует. Пакет представляет собой просто копию пакета SqlLocalDB2012, обновленного, чтобы указать на новую версию файлов msi для загрузки.

Я поместил все файлы для пакета Boostrapper на GitHub, чтобы людям не приходилось создавать файлы самостоятельно. Есть две версии: одна для исходного выпуска, а другая для выпуска SP1. Ниже приведены шаги для самостоятельного создания исходной версии выпуска:

  1. Создать папку SqlLocalDB2014
  2. Создайте XML-файл в папке с именем product.xml со следующим содержимым:

    <?xml version="1.0" encoding="utf-8"?>
    <Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Microsoft.SqlServer.SqlLocalDB.12.0">
      <InstallChecks>
        <FileCheck
          Property="sqllocaldbVersion"
          FileName="sqlservr.exe"
          SearchPath="Microsoft SQL Server\120\LocalDB\Binn"
          SpecialFolder="ProgramFilesFolder"
        />
      </InstallChecks>
    
      <PackageFiles CopyAllPackageFiles="false">
        <PackageFile
          Name="x86\sqllocaldb.msi"
          HomeSite="sqllocaldb_32"
          PublicKey="3082010A0282010100E57C2F2D0CA9EC7AA834E04C3F7F490E0DB615AD1913DE528A26991571A962270737A5833082626C0BA3FD060D171406E6E0ADCC95960A205AA296E1E057303C5D629BC55D890CD034DFD9D8FA35EF11238BC0F9EB4AF439DA2F7110EB11B32C37A370E886173EEF2A46D08EC7B94800A137F1C7C8E7D21E6B4A2AF2C64C1D709F7CC368428E3CED811A52E33E32943D7E18F19BE44B5C11E4D6C3851E6C033073BCC9A8017D9DADD1F573F05B1A7B2F1F8B32BEB38EB53BD9F7FFF35FB3137C139357B8A05E359883A13434F2C5049FB9FE46170C91DFEF0F55F6ECCC39C96165A129EEBE11371BB76E4255C9CC35D152B303709C98349E2936A917195F0BBF0203010001"
        />
        <PackageFile
          Name="x64\sqllocaldb.msi"
          HomeSite="sqllocaldb_64"
          PublicKey="3082010A0282010100E57C2F2D0CA9EC7AA834E04C3F7F490E0DB615AD1913DE528A26991571A962270737A5833082626C0BA3FD060D171406E6E0ADCC95960A205AA296E1E057303C5D629BC55D890CD034DFD9D8FA35EF11238BC0F9EB4AF439DA2F7110EB11B32C37A370E886173EEF2A46D08EC7B94800A137F1C7C8E7D21E6B4A2AF2C64C1D709F7CC368428E3CED811A52E33E32943D7E18F19BE44B5C11E4D6C3851E6C033073BCC9A8017D9DADD1F573F05B1A7B2F1F8B32BEB38EB53BD9F7FFF35FB3137C139357B8A05E359883A13434F2C5049FB9FE46170C91DFEF0F55F6ECCC39C96165A129EEBE11371BB76E4255C9CC35D152B303709C98349E2936A917195F0BBF0203010001"
        />
      </PackageFiles>
    
      <Commands Reboot="Defer">
        <Command PackageFile="x86\sqllocaldb.msi" Arguments="IACCEPTSQLLOCALDBLICENSETERMS=YES" EstimatedInstallSeconds="90">
          <InstallConditions>
            <FailIf Property="VersionNT" Compare="ValueNotExists" String="InvalidPlatformOS" />
            <FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.0.1" String="InvalidPlatformOS" />
            <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired" />
            <BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="Intel" />
            <BypassIf Property="sqllocaldbVersion" Compare="VersionGreaterThanOrEqualTo" Value="2014.120.2000.8" />
          </InstallConditions>
          <ExitCodes>
            <ExitCode Value="0" Result="Success" />
            <ExitCode Value="1641" Result="SuccessReboot" />
            <ExitCode Value="3010" Result="SuccessReboot" />
            <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
          </ExitCodes>
        </Command>
        <Command PackageFile="x64\sqllocaldb.msi" Arguments="IACCEPTSQLLOCALDBLICENSETERMS=YES" EstimatedInstallSeconds="90">
          <InstallConditions>
            <BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="amd64" />
            <BypassIf Property="sqllocaldbVersion" Compare="VersionGreaterThanOrEqualTo" Value="2014.120.2000.8" />
          </InstallConditions>
          <ExitCodes>
            <ExitCode Value="0" Result="Success" />
            <ExitCode Value="1641" Result="SuccessReboot" />
            <ExitCode Value="3010" Result="SuccessReboot" />
            <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
          </ExitCodes>
        </Command>
      </Commands>
    </Product>
    
  3. В папке создайте еще одну папку с именем en и создайте еще один XML-файл с именем package.xml.

     <?xml version="1.0" encoding="utf-8"?>
     <Package Name="DisplayName" LicenseAgreement="Eula.txt" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
       <PackageFiles>
         <PackageFile Name="Eula.txt" />
       </PackageFiles>
       <Strings>
         <String Name="Culture">en</String>
         <String Name="DisplayName">SQL Server 2014 Express LocalDB</String>
         <String Name="sqllocaldb_32">http://download.microsoft.com/download/E/A/E/EAE6F7FC-767A-4038-A954-49B8B05D04EB/LocalDB%2032BIT/SqlLocalDB.msi</String>
         <String Name="sqllocaldb_64">http://download.microsoft.com/download/E/A/E/EAE6F7FC-767A-4038-A954-49B8B05D04EB/LocalDB%2064BIT/SqlLocalDB.msi</String>
         <String Name="AdminRequired">You do not have the permissions required to install SQL Server 2014 Express LocalDB. Please contact your administrator.</String>
         <String Name="GeneralFailure">An error occurred attempting to install SQL Server 2014 Express LocalDB.</String>
         <String Name="InvalidPlatformOS">The current operating system version does not support SQL Server 2014 Express LocalDB.</String>
         <String Name="InvalidPlatformOSServicePack">The current operating system does not meet Service Pack level requirements for SQL Server 2014 Express LocalDB. Install the most recent Service Pack from the Microsoft download center at http://www.microsoft.com/downloads before continuing setup.</String>
       </Strings>
     </Package>
    
  4. Скопируйте файл C:\Program Files\Microsoft SQL Server\120\License Terms\License_SqlLocalDB_1033.txt в папку en и переименуйте его в eula.txt.

  5. Чтобы установить пакет, скопируйте папку SqlLocalDB2014 туда, где расположены другие ваши пакеты загрузчика, например. C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages
  6. Теперь у вас должна быть возможность использовать пакет из Visual Studio, однако, если вы хотите, чтобы компонент был установлен из того же места, что и ваше приложение, вам нужно будет загрузить два sqllocaldb.msi файла, указанные в package.xml файле, и поместить их в x86 и x64 папок внутри SqlLocalDb2014 папки.
  7. Наконец, этот пакет предназначен только для английского языка, но вы можете поддерживать несколько языков, добавляя папки для каждого языка с файлами package.xml и eula.txt.
person kjbartel    schedule 26.05.2015
comment
Спасибо за Ваш ответ. Интересно, почему SQL Server Express 2014 LocalDB не включен в готовом виде в качестве предварительного условия для щелчка мышью. Могли ли быть какие-то проблемы с его использованием? - person Angelo; 26.05.2015
comment
@Angelo Я не уверен, почему они не включают ее, но мне кажется, что clickonce - умирающая технология, поэтому MS ее не поддерживает. Этот пакет также не включен в VS2015 RC. Я высказал предложение по UserVoice незадолго до того, как я сам сделал пакет. - person kjbartel; 27.05.2015
comment
Убедитесь, что вы копируете файлы в правильную папку Packages. На вашем компьютере их может быть несколько. для меня хорошим был: c: \ Program Files (x86) \ Microsoft SDKs \ ClickOnce Bootstrapper \ Packages, вы можете проверить правильный путь в реестре \ HKLM \ Software \ Wow6432Node \ Microsoft \ GenericBootstrapper \ 11.0 - person Istvan Heckl; 22.07.2019
comment
@kjbartel Привет, интересно, как вы определили параметры PackageFile, такие как HomeSite и Name? Мне нужно подобное решение для SqlLocalDb2017. - person Istvan Heckl; 23.07.2019
comment
@IstvanHeckl - это те же строки, что и в файле package.xml. Вы не хотите, чтобы строки были непосредственно в файле product.xml, потому что загрузки могут отличаться для разных языков. Сами по себе имена я не считаю важными, если они одинаковы. Я организовал файлы в отдельные папки x84 и x86, но вы могли просто переименовать файлы в product.xml, например. sqllocaldb_x86.msi и sqllocaldb_x64.msi. - person kjbartel; 23.07.2019

У меня точно такая же проблема. Я нашел один возможный ответ на форуме MSDN, и мне кажется, он работает.

Подводя итог ответу по ссылке: вы должны создать «загрузчик» для LocalDB 2014. Это просто папка в вашем «каталоге Microsoft SDKs», содержащая некоторые конкретные XML-файлы с ключами / метаданными и текстовый файл eula. Ответ в ссылке предоставляет содержимое для этих файлов xml. После перезапуска Visual Studio «Sql Express 2014 LocalDB» появится вместе со всеми другими предварительными условиями и может быть добавлен в зависимости ClickOnce.

person quanben    schedule 26.04.2015

Решение для Localdb2017

Скопируйте папку SqlLocalDB2017 в нужное место, например: c: \ Program Files (x86) \ Microsoft SDKs \ ClickOnce Bootstrapper \ Packages, и перезапустите Visual Studio.

person Istvan Heckl    schedule 23.07.2019

Здесь приведено простое и полное описание того, как добавить загрузчик SqlLocalDB 2014 ClickOnce в Visual Studio. Если вы хотите включить файлы установки sqllocalDB, вам просто нужно загрузить их по ссылкам в файле package.xml. Но кажется, что sqllocaldb_x64.msi неверен и не устанавливается на окнах x64 (проверено на Windows 7 x64 sp1).

person Mahmood Jenami    schedule 17.08.2019