2013-09-21 13 views
16

Pracuję nad aplikacją WPF i korzystam z WiX jako instalatora.Bootstrapping SQL Express z WiX?

Chciałbym rozpocząć korzystanie z SQL Express 2012, ale najpierw chcę rozwiązać problemy z instalatorem.

Szukam pełnego przykładu wykrywania, ładowania, instalowania, uaktualniania i deinstalacji SQL Express 2012 przy użyciu WiX (chociaż częściowe będą również użyteczne).

Ponadto większość logiki wykrywania, które udało mi się znaleźć w Internecie, używa kluczy rejestru. Jednak Microsoft zaleca używanie WMI (patrz: http://blogs.msdn.com/b/sqlexpress/archive/2006/07/29/faq-detecting-sql-server-2005-using-wmi.aspx). Czy to możliwe przy użyciu WiX?

+0

Zrobiłem to za pomocą kluczy rejestru nie byłem świadomy zalecenia WMI, można kierować do mnie informacje? Mogę udostępnić moją wersję klucza rejestru, jeśli chcesz. – Neil

+0

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

+0

To odnosi się do SQL 2005 Myślę, że to samo może zastosuj się do 2012 roku, ale zainstalowałem całą wersję SQL Express od czasu MSDE, wykrywając ją za pomocą kluczy rejestru - prawdą jest, że MS zmienia klucze, ale pomiędzy głównymi wersjami nigdy nie wydaje mi się, żeby się zmieniły. Może być możliwe zaimplementowanie tego kodu w Extended BA (http://wixextba.codeplex.com/) lub w 3.8 za pomocą funkcji BA. – Neil

Odpowiedz

20

To co mam, nadzieję, że to pomaga:

<?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> 

Trzeba by zmienić polecenia Instaluj, aby dopasować swoje wymagania.

+0

Wygląda obiecująco; dzięki. – RickNZ

+0

@RickNZ Czy mógłbyś mi pomóc z 'SQL SERVER 2008' i' SQL SERVER 2008 CE' @ http://stackoverflow.com/questions/19839600/wix-install-prerequisites-and-3rd-party-aparty-plikacje –

+3

Ta linia : '' działa tylko wtedy, gdy dodajemy WixDependencyExtension.dll do projektu, oraz dodaj 'xmlns: dep =" http://schemas.microsoft.com/wix/DependencyExtension "' do tagu 'Wix'. –

1

Brak sugestii pracował dla mnie, aż po 2 zmiany:

  1. zestaw util: RegistrySearch/@ Win64 wartość atrybutu "tak" (domyślnie jest to "nie", i to jest ok dla systemów 32-bitowych)

  2. usuń ExePackage/@ DetectCondition atrybut w ogóle (nie świadomy przyczyny)

Poniżej workin g Przykład:

<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> 
Powiązane problemy