ClickOnce先决条件:SQL Server Express 2014 LocalDB在哪里?

时间:2015-04-23 19:13:33

标签: visual-studio-2013 visual-studio-2015 clickonce localdb prerequisites

我正在从Visual Studio 2013社区版中为我的wpf应用程序创建一个clickonce安装程序。此应用程序使用localdb。如果我手动安装sqlserver express 2014 LocalDB,它在目标机器上运行良好。

但我想在我的clickonce部署中包含SQL Server Express 2014 LocalDB的安装程序。

但是,当我打开先决条件对话框时,只有SQL Server 2012 Express LocalDB可用(参见图像)。我尝试选择' 2012,但它与我的安装程序放入数据文件夹的mdf文件不兼容。

问题是:如何将SQL Server Express 2014 LocalDB安装程序作为先决条件包含在内?有没有办法将MSI文件放在某处并使其工作?或者更容易坚持' 2012?

VS project prerequisites

4 个答案:

答案 0 :(得分:15)

正如我在MSDN forums上发布的那样,我创建了自己的软件包,因为正式版本不存在。该软件包基本上只是更新SqlLocalDB2012软件包的副本,以指向要下载的新版msi文件。

我已将GitHub上的boostrapper包的所有文件都放在一起,这样人们就不必自己创建文件了。有两个版本,一个用于原始版本,另一个用于SP1版本。以下是自己创建原始发行版本的步骤:

  1. 创建文件夹SqlLocalDB2014
  2. 在名为product.xml的文件夹中创建一个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的文件夹,并创建另一个名为package.xml

    的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文件夹中的x64SqlLocalDb2014个文件夹中。
  7. 最后,此套餐仅适用于英语,但您可以通过为package.xmleula.txt个文件添加每种语言的文件夹来支持多种语言。

答案 1 :(得分:5)

我也有完全相同的问题。我在MSDN论坛上找到了one potential answer,它似乎对我有用。

总结链接的答案:你必须创建一个&#34; bootstrapper&#34;对于LocalDB 2014.这只是您的&#34; Microsoft SDKs目录中的一个文件夹&#34;包含一些特定的xml文件,包含键/元数据和eula文本文件。链接中的答案提供了这些xml文件的内容。重启visual studio后,&#34; Sql Express 2014 LocalDB&#34;将与所有其他先决条件一起出现,并可添加到ClickOnce依赖项。

答案 2 :(得分:2)

Here是有关如何在Visual Studio中添加SqlLocalDB 2014 ClickOnce Bootstraper的简单完整的说明。 如果要包括sqllocalDB安装文件,只需从package.xml文件中的链接下载它们。但是似乎sqllocaldb_x64.msi是错误的,并且它没有安装在x64窗口上(在Windows 7 x64 sp1上测试)。

答案 3 :(得分:1)

The solution for Localdb2017

将SqlLocalDB2017文件夹复制到正确的位置,例如:c:\ Program Files(x86)\ Microsoft SDKs \ ClickOnce Bootstrapper \ Packages,然后重新启动Visual Studio。