2013-09-21 25 views
16

Tôi đang làm việc trên một ứng dụng WPF và sử dụng WiX làm trình cài đặt.Bootstrapping SQL Express từ WiX?

Tôi muốn bắt đầu sử dụng SQL Express 2012, nhưng trước tiên bạn muốn giải quyết các vấn đề về trình cài đặt.

Tôi đang tìm một ví dụ đầy đủ về phát hiện, khởi động, cài đặt, nâng cấp và gỡ cài đặt SQL Express 2012 bằng WiX (mặc dù partials cũng hữu ích).

Ngoài ra, hầu hết các logic phát hiện mà tôi đã tìm thấy từ trước đến nay trên web đều sử dụng khóa đăng ký. Tuy nhiên, Microsoft khuyên bạn nên sử dụng WMI thay thế (xem http://blogs.msdn.com/b/sqlexpress/archive/2006/07/29/faq-detecting-sql-server-2005-using-wmi.aspx). Có thể sử dụng WiX không?

+0

Tôi đã làm điều này bằng các khóa registry Tôi đã không nhận thức được sự giới thiệu WMI, bạn có thể trực tiếp cho tôi để thông tin? Tôi có thể chia sẻ phiên bản khóa đăng ký của tôi nếu bạn muốn. – Neil

+0

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

+0

Điều đó đề cập đến SQL 2005 tôi đoán tương tự có thể áp dụng cho năm 2012 nhưng tôi đã được cài đặt tất cả các phiên bản của SQL Express từ MSDE bằng cách phát hiện nó thông qua các khóa registry - đúng là MS thay đổi các phím nhưng giữa các phiên bản chính tôi chưa bao giờ có vẻ thay đổi. Có thể thực thi mã đó trong Extended BA (http://wixextba.codeplex.com/) hoặc điều tương tự trong 3.8 sử dụng hàm BA. – Neil

Trả lời

20

Đây là những gì tôi có, hy vọng nó sẽ giúp:

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

Bạn sẽ cần phải thay đổi cài đặt lệnh để phù hợp với yêu cầu của bạn.

+0

Có vẻ đầy hứa hẹn; cảm ơn. – RickNZ

+0

@RickNZ Bạn có thể vui lòng giúp tôi với 'SQL SERVER 2008' và' SQL SERVER 2008 CE' @ http://stackoverflow.com/questions/19839600/wix-install-prerequisites-and-3rd-party-applications –

+3

Dòng này : '' chỉ hoạt động nếu bạn thêm WixDependencyExtension.dll vào dự án và thêm 'xmlns: dep =" http://schemas.microsoft.com/wix/DependencyExtension "' vào thẻ 'Wix'. –

1

Không gợi ý làm việc cho tôi cho đến khi sau 2 thay đổi:

  1. bộ util: RegistrySearch/@ Win64 giá trị gán cho "yes" (mặc định là "không", và đó là ok cho các hệ thống 32bit)

  2. remove ExePackage/@ DetectCondition thuộc tính ở tất cả (không biết nguyên nhân)

Dưới đây là workin g Ví dụ:

<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> 
Các vấn đề liên quan