ClickOnce Prerequisites: where is SQL Server Express 2014 LocalDB?
Asked Answered
D

4

16

I am creating a clickonce installer for my wpf application from within Visual Studio 2013 Community edition. This application uses a localdb. It works fine on the target machines if I manually install sqlserver express 2014 LocalDB.

But I would like to include the installer for SQL Server Express 2014 LocalDB with my clickonce deployment.

When I open the prerequisites dialog, however, only SQL Server 2012 Express LocalDB is available (see image). I tried selecting '2012, but it is not compatible with the mdf file my installer drops into the data folder.

The question is: How do I include the SQL Server Express 2014 LocalDB installer as a prerequisite? Is there a way to just drop the MSI file somewhere and make it work? Or will it be easier to stick with '2012?

VS project prerequisites

Deflation answered 23/4, 2015 at 19:13 Comment(0)
F
18

As I posted on the MSDN forums I created my own package as an official version doesn't exist. The package is basically just a copy of the SqlLocalDB2012 package updated to point to the new version of msi files to download.

I've put all the files for the boostrapper package on GitHub so people don't have to create the files themselves. There's two versions, one for the original release and one for the SP1 release. Following are the steps to create the original release version yourself:

  1. Create a folder SqlLocalDB2014
  2. Create an xml file in the folder called product.xml with the following contents:

    <?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. Within the folder create another folder called en and create another xml file called 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. Copy the C:\Program Files\Microsoft SQL Server\120\License Terms\License_SqlLocalDB_1033.txt file into the en folder and rename it to eula.txt.

  5. To install the package copy the folder SqlLocalDB2014 to where your other bootstrapper packages are located e.g. C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages
  6. You should now be able to use the package from Visual Studio, however if you wish to have the component installed from the same location as your application then you'll need to download the two sqllocaldb.msi files specified in the package.xml file and put them in x86 and x64 folders inside the SqlLocalDb2014 folder.
  7. Lastly, this package is only for English but you may support multiple languages by adding folders for each language with package.xml and eula.txt files.
Factorial answered 26/5, 2015 at 6:42 Comment(5)
Thanks for your answer. I wonder why SQL Server Express 2014 LocalDB isn't included "out-of-the-box" as a clickonce prerequisite. Could there be some "gotcha" with using it?Deflation
@Deflation I'm not sure why they don't include it but my feeling is that clickonce is a dying technology so MS isn't supporting it. The package isn't included in the VS2015 RC either. I raised a suggestion on UserVoice a while back before I made the package myself.Factorial
Be sure you copy the files in the correct Packages folder. There might be several on your machine. for me the good one was: "c:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages" you can check the correct path in registry \HKLM\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0Tenure
@Factorial Hi, I wonder how did you determine the PackageFile parameters, like HomeSite and Name? I need a similar solution for SqlLocalDb2017.Tenure
@IstvanHeckl they are the same strings which are in the package.xml file. You don't want to have the strings in the product.xml file directly because the downloads may be different for different languages. The actual names themselves I do not think are important as long as they are the same. I have organised the files into separate x84 and x86 folders but you could have just renamed the files in product.xml, e.g. sqllocaldb_x86.msi and sqllocaldb_x64.msi.Factorial
H
5

I'm having exactly the same problem as well. I found one potential answer at the MSDN forum and it seems to work for me.

To summarize the answer from the link: You have to create a "bootstrapper" for LocalDB 2014. This is just a folder in your "Microsoft SDKs directory" containing some specific xml files with keys/meta-data and an eula text file. The answer in the link provides the content for these xml files. After restarting visual studio, "Sql Express 2014 LocalDB" will appear along with all the other prerequisites and can be added to ClickOnce dependencies.

Haunting answered 26/4, 2015 at 0:38 Comment(0)
T
4

The solution for Localdb2017

Copy the SqlLocalDB2017 folder into the proper place e.g.: c:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages and restart Visual Studio.

Tenure answered 23/7, 2019 at 13:7 Comment(0)
C
2

Here is a simple and complete description on how to add SqlLocalDB 2014 ClickOnce Bootstraper in Visual Studio. If you want to include sqllocalDB setup files you just got to download them from the links in the package.xml file. But it seems that the sqllocaldb_x64.msi is wrong and it does not install on x64 windows (tested on Windows 7 x64 sp1).

Castillo answered 17/8, 2019 at 7:50 Comment(1)
github.com/heckl/SqlLocalDB2017-Bootstrapper this address it not working i need Local db 2017 packege in visual studio 2019Jhvh

© 2022 - 2024 — McMap. All rights reserved.