14

Sto creando un programma di installazione clickonce per la mia applicazione wpf dall'edizione di Visual Studio 2013 Community. Questa applicazione utilizza un localdb. Funziona perfettamente sui computer di destinazione se installo manualmente SQLserver express 2014 LocalDB.ClickOnce Prerequisiti: dov'è SQL Server Express 2014 LocalDB?

Ma vorrei includere il programma di installazione per SQL Server Express 2014 LocalDB con la mia distribuzione clickonce.

Quando si apre la finestra di dialogo dei prerequisiti, tuttavia, è disponibile solo SQL Server 2012 Express LocalDB (vedere l'immagine). Ho provato a selezionare '2012, ma non è compatibile con il file mdf che il mio programma di installazione lascia nella cartella dei dati.

La domanda è: Come è possibile includere il programma di installazione LocalDB di SQL Server Express 2014 come prerequisito? C'è un modo per rilasciare il file MSI da qualche parte e farlo funzionare? O sarà più facile restare con "2012?

VS project prerequisites

risposta

15

Come ho postato sul MSDN forums ho creato il mio pacchetto come versione ufficiale non esiste. Il pacchetto è fondamentalmente solo una copia del pacchetto SqlLocalDB2012 aggiornato per indicare la nuova versione dei file msi da scaricare.

Ho messo tutti i file per il pacchetto boostrapper su GitHub in modo che le persone non debbano creare i file stessi. Esistono due versioni, una per la versione originale e una per la versione SP1. Di seguito sono i passaggi per creare la versione originale da soli:

  1. Creare una cartella SqlLocalDB2014
  2. Creare un file xml nella cartella chiamata product.xml con il seguente contenuto:

    <?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. All'interno del cartella creare un'altra cartella denominata en e creare un altro file xml denominato 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. Copiare il file C:\Program Files\Microsoft SQL Server\120\License Terms\License_SqlLocalDB_1033.txt nella cartella en e rinominarlo in eula.txt.

  5. Per installare il pacchetto, copiare la cartella SqlLocalDB2014 nella posizione in cui si trovano gli altri pacchetti bootstrapper, ad es.C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages
  6. Ora si dovrebbe essere in grado di utilizzare il pacchetto da Visual Studio, tuttavia se si desidera che il componente sia installato dalla stessa posizione dell'applicazione, sarà necessario scaricare i due file sqllocaldb.msi specificati nel file package.xml e inserirli nelle cartelle x86 e x64 all'interno della cartella SqlLocalDb2014.
  7. Infine, questo pacchetto è solo per l'inglese ma è possibile supportare più lingue aggiungendo cartelle per ogni lingua con i file package.xml e eula.txt.
+0

Grazie per la risposta. Mi chiedo perché SQL Server Express 2014 LocalDB non è incluso "out-of-the-box" come prerequisito di clickonce. Potrebbe esserci qualche "gotcha" con l'utilizzo? – Angelo

+0

@Angelo Non sono sicuro del motivo per cui non lo includono, ma la mia sensazione è che clickonce sia una tecnologia morente, quindi MS non la supporta. Il pacchetto non è incluso nel VS2015 RC. Ho sollevato un suggerimento su [UserVoice] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6186963-sql-server-2014-clickonce-bootstrapper-packages) qualche istante prima che facessi il pacchetto me stesso. – kjbartel

5

Sto avendo esattamente lo stesso problema pure. Ho trovato one potential answer al forum MSDN e sembra funzionare per me.

Per riassumere la risposta dal link: Si deve creare un "programma di avvio automatico" per LocalDB 2014. Questa è solo una cartella nella "directory di Microsoft SDK" contenente alcuni file XML specifici con le chiavi/meta-dati e di un EULA file di testo. La risposta nel collegamento fornisce il contenuto per questi file xml. Dopo aver riavviato Visual Studio, "Sql Express 2014 LocalDB" apparirà insieme a tutti gli altri prerequisiti e può essere aggiunto alle dipendenze ClickOnce.