2013-09-21 29 views
16

我正在使用WPF應用程序,並將WiX用作安裝程序。從WiX引導SQL Express?

我想開始使用SQL Express 2012,但首先要解決安裝程序問題。

我正在尋找使用WiX檢測,引導,安裝,升級和卸載SQL Express 2012的完整示例(雖然部分內容也會有用)。

此外,我在網上發現的大多數檢測邏輯都使用註冊表項。但是,Microsoft建議使用WMI(請參閱http://blogs.msdn.com/b/sqlexpress/archive/2006/07/29/faq-detecting-sql-server-2005-using-wmi.aspx)。這可能使用WiX嗎?

+0

我已經這樣做了使用註冊表項我不知道的WMI的建議,你可以直接我的信息?如果你喜歡,我可以分享我的註冊表鍵版本。 – Neil

+0

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

+0

這是指SQL 2005我想同樣可以適用於2012年,但我已經安裝了所有版本的SQL Express自MSDE以來,通過註冊表鍵檢測它 - 毫無疑問,MS更改密鑰,但主要版本之間,我從來沒有看到他們的變化。使用BA函數可以在Extended BA(http://wixextba.codeplex.com/)中實現該代碼,也可以在3.8中執行相同的代碼。 – Neil

回答

20

這就是我,希望它有助於:

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

您需要更改安裝命令,以符合您的要求。

+0

看起來很有前途;謝謝。 – RickNZ

+0

@RickNZ你能幫我使用'SQL SERVER 2008'和'SQL SERVER 2008 CE' @ http://stackoverflow.com/questions/19839600/wix-install-prerequisites-and-3rd-party-applications –

+3

這條線:''只適用於將WixDependencyExtension.dll添加到項目中,並且在Wix標籤中添加'xmlns:dep =「http://schemas.microsoft.com/wix/DependencyExtension」'。 –

1

沒有建議爲我工作,直到下列2點的變化:

  1. 集UTIL:RegistrySearch/@ Win64的屬性值設置爲 「是」(默認爲 「否」,它的確定對32位系統)

  2. 刪除ExePackage/@ DetectCondition所有屬性(不知道原因)

下面就是幹活克實例:

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