2013-09-21 14 views
16

Ich arbeite an einer WPF-App und verwende WiX als Installer.Bootstrapping SQL Express von WiX?

Ich möchte SQL Express 2012 verwenden, möchte aber zuerst Installationsprobleme beheben.

Ich bin auf der Suche nach einem vollständigen Beispiel zum Erkennen, Booten, Installieren, Aktualisieren und Deinstallieren von SQL Express 2012 mit WiX (obwohl Partials auch nützlich sein werden).

Auch die meisten der Erkennungslogik, die ich bisher im Web gefunden habe, verwendet Registrierungsschlüssel. Microsoft empfiehlt jedoch, stattdessen WMI zu verwenden (siehe http://blogs.msdn.com/b/sqlexpress/archive/2006/07/29/faq-detecting-sql-server-2005-using-wmi.aspx). Ist das mit WiX möglich? Diese

+0

ich dies mit Registry-Schlüssel getan habe ich keine Kenntnis von der WMI-Empfehlung war, können Sie mich auf die Informationen richten? Ich kann meine Registrierungsschlüsselversion teilen, wenn Sie möchten. – Neil

+0

Siehe http://blogs.msdn.com/b/sqlexpress/archive/2006/07/29/faq-detecting-sql-server-2005-using-wmi.aspx – RickNZ

+0

Das bezieht sich auf SQL 2005 Ich denke, das gleiche könnte gelten für 2012, aber ich habe alle Version von SQL Express seit MSDE installiert, indem Sie es über Registrierungsschlüssel erkennen - es ist wahr, dass MS die Schlüssel ändern, aber zwischen den wichtigsten Versionen habe ich nie scheinen, dass sie sich ändern. Es könnte möglich sein, diesen Code im Extended BA (http://wixextba.codeplex.com/) oder in 3.8 mit einer BA-Funktion zu implementieren. – Neil

Antwort

20

ist, was ich habe, hoffen, es hilft:

<?define ServerInstall="SomeCondition" ?> 

<?define InstanceName = "YOUR_INSTANCE" ?> 
<?define SqlWebLink = http://download.microsoft.com/download/5/2/9/529FEF7B-2EFB-439E-A2D1-A1533227CD69/SQLEXPR_x86_ENU.exe ?> 

<Variable Name="SqlVariable" Type="string" Value="/SAPWD=some_password" Hidden="yes" /> 

<!-- Read SQL Server keys to find current instance and version --> 
<util:RegistrySearch 
    Id="SqlInstanceKeyFound" 
    Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" Value="$(var.InstanceName)" 
    Result="exists" Variable="SqlInstanceKeyFound" /> 
<util:RegistrySearch 
    Id="SqlInstanceKey" 
    Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" Value="$(var.InstanceName)" 
    Variable="SqlInstanceKey" After="SqlInstanceKeyFound" Condition="SqlInstanceKeyFound" /> 
<util:RegistrySearch 
    Id="SqlInstanceFound" 
    Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SqlInstanceKey]" 
    Result="exists" Variable="SqlInstanceFound" After="SqlInstanceKey" Condition="SqlInstanceKeyFound" /> 
<util:RegistrySearch 
    Id="SqlVersion" 
    Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SqlInstanceKey]\Setup" Value="Version" 
    Variable="SqlVersion" After="SqlInstanceKey" Condition="SqlInstanceFound" /> 

<PackageGroup Id="Sql2012Express"> 
    <!-- 
    SQL Server 2012 Express - Install new instance 
    http://msdn.microsoft.com/en-us/library/ms144259.aspx 
    SQL Server Express requires WIndows Installer 4.5 
    RepairCommand="/ACTION=Repair /INSTANCENAME=$(var.InstanceName) /Q /HIDECONSOLE" 
    --> 
    <ExePackage Id="Sql2012Express" 
    DisplayName="SQL Server 2012 Express" 
    Cache="yes" 
    Compressed="no" 
    PerMachine="yes" 
    Permanent="no" 
    Vital="yes" 
    Name="Redist\SQLEXPR_x86_ENU.exe" 
    SourceFile="..\Packages\SQLEXPR_x86_ENU.exe" 
    DownloadUrl="$(var.SqlWebLink)" 
    InstallCommand="/ACTION=Install /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /SECURITYMODE=SQL [SqlVariable] /TCPENABLED=1 /SQLSVCACCOUNT=&quot;NT AUTHORITY\NETWORK SERVICE&quot; /SQLSVCSTARTUPTYPE=Manual /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /ADDCURRENTUSERASSQLADMIN=FALSE /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms" 
    UninstallCommand="/Action=Uninstall /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /Q /HIDECONSOLE" 
    DetectCondition="SqlInstanceFound" 
    InstallCondition="$(var.ServerInstall)"> 
    <ExitCode Value ="3010" Behavior="forceReboot" /> 
    <dep:Provides DisplayName="Net2 SQL Server 2012 Express" Key="SQLServer2012Express,$(var.InstanceName)" Version="11.0.3000.0" /> 
    </ExePackage> 

    <!-- 
    SQL Server 2012 Express - Upgrade existing pre-SQL 2012 instance 
    --> 
    <ExePackage Id="Sql2012ExpressUpgrade" 
    DisplayName="SQL Server 2012 Express Upgrade" 
    Cache="no" 
    Compressed="no" 
    PerMachine="yes" 
    Permanent="yes" 
    Vital="yes" 
    Name="Redist\SQLEXPR_x86_ENU.exe" 
    SourceFile="..\Packages\SQLEXPR_x86_ENU.exe" 
    DownloadUrl="$(var.SqlWebLink)" 
    InstallCommand="/ACTION=Upgrade /INSTANCENAME=$(var.InstanceName) /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms" 
    DetectCondition="NOT (SqlInstanceFound AND (SqlVersion &lt; v11.0.0.0))" 
    InstallCondition="$(var.ServerInstall)"> 
    <ExitCode Value ="3010" Behavior="forceReboot" /> 
    </ExePackage> 

    <!-- 
    SQL Server 2012 SP1 Express - Upgrade existing SQL 2012 instance to SP1 
    --> 
    <ExePackage Id="Sql2012ExpressEditionUpgrade" 
    DisplayName="SQL Server 2012 SP1 Express Patch" 
    Cache="no" 
    Compressed="no" 
    PerMachine="yes" 
    Permanent="yes" 
    Vital="yes" 
    Name="Redist\SQLEXPR_x86_ENU.exe" 
    SourceFile="..\Packages\SQLEXPR_x86_ENU.exe" 
    DownloadUrl="$(var.SqlWebLink)" 
    InstallCommand="/ACTION=Patch /INSTANCENAME=$(var.InstanceName) /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms" 
    DetectCondition="NOT (SqlInstanceFound AND (SqlVersion &gt; v11.0.0.0) AND (SqlVersion &lt; v11.0.3000.0))" 
    InstallCondition="$(var.ServerInstall)"> 
    <ExitCode Value ="3010" Behavior="forceReboot" /> 
    </ExePackage> 

Sie würden die Installationsbefehle ändern müssen, um Ihre Anforderungen entsprechen.

+0

Sieht vielversprechend aus; Vielen Dank. – RickNZ

+0

@RickNZ Könnten Sie mir bitte helfen mit 'SQL SERVER 2008' und' SQL SERVER 2008 CE' @ http://stackoverflow.com/questions/19839600/wix-install-prerequisites-and-3rd-party-applications –

+3

Diese Zeile : '' funktioniert nur, wenn Sie WixDependencyExtension.dll dem Projekt hinzufügen und füge 'xmlns: dep =" http://schemas.microsoft.com/wix/DependencyExtension "' zum Tag 'Wix' hinzu. –

1

keine Vorschläge für mich gearbeitet, bis folgende zwei Änderungen:

  1. Satz util: RegistrySearch/@ Win64 Attributwert auf "yes" (Standard ist "nein", und es ist in Ordnung für 32-Bit-Systeme)

  2. entfernen ExePackage/@ DetectCondition Attribut überhaupt (tun, um die Ursache nicht bekannt)

unten workin g Beispiel:

<util:RegistrySearch Id="SqlInstanceKeyFoundSearch" 
         Root="HKLM" 
         Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" 
         Value="SQLEXPRESSENGINE" 
         Result="exists" 
         Variable="SqlInstanceKeyFound" 
         Win64="yes" /> 

    <PackageGroup Id="SQLServerExpress"> 
     <ExePackage Compressed="no" 
        DisplayName="Installing SQL Server Express 2014" 
        PerMachine="yes" 
        Cache="yes" 
        Vital="yes" 
        Permanent="no" 
        InstallCommand='/IACCEPTSQLSERVERLICENSETERMS /HIDECONSOLE /INSTANCEID="$(var.InstanceName)" /ACTION="Install" /FEATURES=SQLENGINE /HELP="False" /INDICATEPROGRESS="False" /QUIET="True" /QUIETSIMPLE="False" /ERRORREPORTING="False" /SQMREPORTING="False" /INSTANCENAME="$(var.InstanceName)" /AGTSVCSTARTUPTYPE="Manual" /ISSVCSTARTUPTYPE="Automatic" /ISSVCACCOUNT="NT AUTHORITY\NetworkService" /ASSVCSTARTUPTYPE="Automatic" /ASCOLLATION="Latin1_General_CI_AS" /ASDATADIR="Data" /ASLOGDIR="Log" /ASBACKUPDIR="Backup" /ASTEMPDIR="Temp" /ASCONFIGDIR="Config" /ASPROVIDERMSOLAP="1" /SQLSVCSTARTUPTYPE="Automatic" /FILESTREAMLEVEL="0" /ENABLERANU="True" /SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS" /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /ADDCURRENTUSERASSQLADMIN="True" /TCPENABLED="0" /NPENABLED="0" /BROWSERSVCSTARTUPTYPE="Disabled" /RSSVCSTARTUPTYPE="Automatic" /RSINSTALLMODE="FilesOnlyMode" /SECURITYMODE=SQL /SAPWD="tomsoN_admin_1032"' 
        UninstallCommand='/Action=Uninstall /INSTANCENAME="$(var.InstanceName)" /FEATURES=SQLENGINE /QUIET="True" /HIDECONSOLE' 
        InstallCondition="NOT SqlInstanceKeyFound" 
        DownloadUrl="https://download.microsoft.com/download/1/5/6/156992E6-F7C7-4E55-833D-249BD2348138/ENU/x64/SQLEXPR_x64_ENU.exe" 
        Name="SQLEXPR_x64_ENU.exe"> 
      <RemotePayload CertificatePublicKey="B78FE7F6917E1BC5F4A9C77BA3D555A0E807B9E0" CertificateThumbprint="67B1757863E3EFF760EA9EBB02849AF07D3A8080" Description="Microsoft SQL Server 2014 Express SP1" Hash="0C90C147A1C2A550165C9301AE7A6C604E318E51" ProductName="Microsoft SQL Server 2014 Express SP1" Size="318752832" Version="12.1.4100.1" /> 
     </ExePackage> 

    </PackageGroup>