14

Tworzę instalator clickonce dla mojej aplikacji wpf z poziomu edycji społeczności Visual Studio 2013. Ta aplikacja używa localdb. Działa dobrze na komputerach docelowych, jeśli ręcznie zainstaluję sqlserver express 2014 LocalDB.Wymagania wstępne ClickOnce: gdzie jest SQL Server Express 2014 LocalDB?

Ale chciałbym dołączyć instalator dla SQL Server Express 2014 LocalDB z moim wdrożeniem clickonce.

Po otwarciu okna wymagań wstępnych dostępny jest tylko SQL Server 2012 Express LocalDB (patrz zdjęcie). Próbowałem wybrać "2012, ale nie jest kompatybilny z plikiem mdf, który mój instalator wpada do folderu danych.

Pytanie brzmi: Jak dołączyć program instalacyjny SQL Server Express 2014 LocalDB jako wymaganie wstępne? Czy istnieje sposób, aby po prostu upuścić plik MSI i sprawić, by działało? A może łatwiej będzie trzymać się "2012 roku?

VS project prerequisites

Odpowiedz

15

Jak napisałem na MSDN forums stworzyłem własny pakiet, ponieważ oficjalna wersja nie istnieje. Pakiet jest w zasadzie tylko kopią pakietu SqlLocalDB2012 zaktualizowanego w celu wskazania nowej wersji plików msi do pobrania.

Umieściłem wszystkie pliki dla pakietu boostrapper na GitHub, aby ludzie nie musieli tworzyć samych plików. Istnieją dwie wersje, jedna dla oryginalnej wersji i jedna dla wersji SP1. Poniżej przedstawiono kroki do stworzenia oryginalnej wersji siebie:

  1. Utwórz folder SqlLocalDB2014
  2. Utwórz plik XML w folderze o nazwie product.xml o następującej treści:

    <?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. W ramach utworzyć inny folder o nazwie en i utworzyć kolejny plik xml o nazwie 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. Skopiuj plik C:\Program Files\Microsoft SQL Server\120\License Terms\License_SqlLocalDB_1033.txt do folderu en i zmień jego nazwę na eula.txt.

  5. Aby zainstalować pakiet, skopiuj folder SqlLocalDB2014 do miejsca, w którym znajdują się inne pakiety startowe.C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages
  6. Powinieneś teraz móc korzystać z pakietu Visual Studio, jednak jeśli chcesz zainstalować komponent z tej samej lokalizacji co aplikacja, musisz pobrać dwa pliki sqllocaldb.msi określone w pliku package.xml i umieść je w folderach x86 i x64 w folderze SqlLocalDb2014.
  7. Wreszcie, ten pakiet jest przeznaczony tylko dla języka angielskiego, ale możesz obsługiwać wiele języków, dodając foldery dla każdego języka z plikami package.xml i eula.txt.
+0

Dzięki za odpowiedź. Zastanawiam się, dlaczego SQL Server Express 2014 LocalDB nie jest "out of the box" jako wstępne wymaganie clickonce. Czy może zaistnieć jakaś "gotcha" z jego użyciem? – Angelo

+0

@ Angelo Nie jestem pewien, dlaczego nie obejmują go, ale moim zdaniem jest to, że clickonce jest technologią umierania, więc MS nie obsługuje go. Pakiet nie jest zawarty w VS2015 RC. Przedstawiłem sugestię dotyczącą [UserVoice] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6186963-sql-server-2014-clickonce-bootstrapper-packages) jakiś czas temu, zanim zrobiłem pakuj się. – kjbartel

5

Mam dokładnie taki sam problem jak dobrze. Znalazłem one potential answer na forum MSDN i wydaje się, że działa dla mnie.

Podsumowując odpowiedź z linku: Musisz utworzyć "bootstrapper" dla LocalDB 2014. Jest to po prostu folder w twoim "katalogu Microsoft SDKs" zawierający określone pliki xml z kluczami/metadanymi oraz eula plik tekstowy. Odpowiedź w odnośniku zawiera treść tych plików xml. Po ponownym uruchomieniu Visual Studio "Sql Express 2014 LocalDB" pojawi się wraz z wszystkimi innymi wymaganiami wstępnymi i może zostać dodany do zależności ClickOnce.