14

Ich erstelle ein Clickonce-Installationsprogramm für meine WPF-Anwendung innerhalb der Visual Studio 2013 Community Edition. Diese Anwendung verwendet eine lokale Datenbank. Es funktioniert gut auf den Zielmaschinen, wenn ich sqlserver Express 2014 LocalDB manuell installiere.ClickOnce Voraussetzungen: Wo ist SQL Server Express 2014 LocalDB?

Aber ich möchte das Installationsprogramm für SQL Server Express 2014 LocalDB mit meiner Clickonce-Bereitstellung hinzufügen.

Wenn ich das Dialogfeld Voraussetzungen öffne, ist jedoch nur SQL Server 2012 Express LocalDB verfügbar (siehe Abbildung). Ich habe versucht, 2012 auszuwählen, aber es ist nicht kompatibel mit der MDF-Datei, die mein Installer in den Datenordner legt.

Die Frage ist: Wie schließe ich das SQL Server Express 2014 LocalDB-Installationsprogramm als Voraussetzung ein? Gibt es eine Möglichkeit, die MSI-Datei einfach irgendwo abzulegen und zum Laufen zu bringen? Oder wird es leichter sein, bei "2012" zu bleiben?

VS project prerequisites

Antwort

15

Als ich auf die MSDN forums gepostet habe, habe ich mein eigenes Paket erstellt, da eine offizielle Version nicht existiert. Das Paket ist im Grunde nur eine Kopie des SqlLocalDB2012 Pakets aktualisiert, um auf die neue Version von MSI-Dateien zum Download zeigen.

Ich habe alle Dateien für das Bootstrapper-Paket auf GitHub gelegt, damit die Leute die Dateien nicht selbst erstellen müssen. Es gibt zwei Versionen, eine für die Originalversion und eine für die SP1-Version. Im Folgenden sind die Schritte, um die ursprüngliche Release-Version selbst zu erstellen:

  1. Erstellen Sie einen Ordner SqlLocalDB2014
  2. eine XML-Datei in der product.xml mit den folgenden Inhalten genannt Ordner erstellen:

    <?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. Innerhalb der Ordner erstellen Sie einen anderen Ordner namens en und erstellen Sie eine andere XML-Datei namens 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. Kopieren Sie die C:\Program Files\Microsoft SQL Server\120\License Terms\License_SqlLocalDB_1033.txt-Datei in den Ordner en und benennen Sie sie in eula.txt.

  5. Um das Paket zu installieren, kopieren Sie den Ordner SqlLocalDB2014 dorthin, wo sich Ihre anderen Bootstrapper-Pakete befinden, z.
  6. Sie sollten nun das Paket von Visual Studio verwenden können. Wenn Sie die Komponente jedoch vom selben Ort wie Ihre Anwendung installieren möchten, müssen Sie die beiden in der Datei sqllocaldb.msi angegebenen Dateien herunterladen Legen Sie sie in und x64 Ordner in den Ordner SqlLocalDb2014.
  7. Schließlich ist dieses Paket nur für Englisch, aber Sie können mehrere Sprachen unterstützen, indem Sie Ordner für jede Sprache mit den Dateien package.xml und eula.txt hinzufügen.
+0

Danke für Ihre Antwort. Ich frage mich, warum die LocalDB von SQL Server Express 2014 nicht als "out-of-the-box" im Lieferumfang von ClickOnce enthalten ist. Könnte es ein "Gotcha" mit ihm geben? – Angelo

+0

@Angelo Ich bin nicht sicher, warum sie es nicht einschließen, aber mein Gefühl ist, dass Clickonce eine sterbende Technologie ist, so dass MS es nicht unterstützt. Das Paket ist auch nicht im VS2015 RC enthalten. Ich habe vor einer Weile einen Vorschlag zu [UserVoice] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6186963-sql-server-2014-clickonce-bootstrapper-packages) gemacht, bevor ich das gemacht habe verpacke mich. – kjbartel

5

Ich habe genau das gleiche Problem auch. Ich habe one potential answer im MSDN-Forum gefunden und es scheint für mich zu funktionieren.

Um die Antwort aus dem Link zusammenzufassen: Sie müssen einen "Bootstrapper" für LocalDB 2014 erstellen. Dies ist nur ein Ordner in Ihrem "Microsoft SDKs-Verzeichnis" mit einigen speziellen XML-Dateien mit Schlüssel/Metadaten und einem eula Textdatei. Die Antwort in dem Link enthält den Inhalt für diese XML-Dateien. Nach dem Neustart von Visual Studio wird "Sql Express 2014 LocalDB" zusammen mit allen anderen Voraussetzungen angezeigt und kann zu ClickOnce-Abhängigkeiten hinzugefügt werden.