卸载时未删除SQL Express 2014实例

时间:2016-08-24 07:59:08

标签: wix uninstall sql-server-2014-express

我正在尝试设置一个安装,以sql express 2014为先决条件。安装本身工作正常,但卸载时,实例不会被删除。我仍然可以通过我的SQL管理器访问它并在注册表中找到它。

这是我的链:

<Chain>
        <ExePackage 
            Id="Netfx4Full" 
            Name="dotNetFx40_Full_x86_x64.exe"
            Cache="no" 
            Compressed="no" 
            PerMachine="yes" 
            Permanent="yes" 
            Vital="yes"
            SourceFile="packages\dotNetFx40_Full_x86_x64.exe"
            DownloadUrl="https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"
            DetectCondition="Net4FullVersion AND (NOT VersionNT64 OR Net4x64FullVersion)"
            InstallCondition="(VersionNT &lt; v6.0 OR VersionNT64 &lt; v6.0) AND (NOT (Net4FullVersion OR Net4x64FullVersion))">
        </ExePackage>

        <PackageGroupRef Id="Sql2014Express"/>

        <RollbackBoundary />

        <MsiPackage Id="MainPackage" SourceFile="MyApplication.msi" DisplayInternalUI="yes" Compressed="yes" Vital="yes" />
    </Chain>

这是我的ExePackage:

<PackageGroup Id="Sql2014Express">
    <ExePackage Id="SQL2014Expressx64"
                InstallCondition="VersionNT64 AND NOT SQL2014x64InstanceInstalled"
                SourceFile="packages\SQLEXPR_x64_ENU.exe"
                DownloadUrl="$(var.SqlWebLink64)"
                DisplayName="Installing Microsoft SQL Express 2014"
                InstallCommand="/ACTION=Install /INSTANCENAME=$(var.InstanceName) /FEATURES=SQLENGINE /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms /SQLSVCSTARTUPTYPE=Automatic /SQLSVCACCOUNT=&quot;NT AUTHORITY\NETWORK SERVICE&quot; /AGTSVCACCOUNT=&quot;NT AUTHORITY\NETWORK SERVICE&quot; /ASSYSADMINACCOUNTS=BUILTIN\Administrators /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /BROWSERSVCSTARTUPTYPE=Disabled /ADDCURRENTUSERASSQLADMIN=true /TCPENABLED=1"
                UninstallCommand="/Action=Uninstall /INSTANCENAME=$(var.InstanceName) /FEATURES=SQLENGINE /Q /HIDECONSOLE"
                Cache="yes"
                    Vital="yes"
                Compressed="no"
                PerMachine="yes"
                Permanent="no"/>
...
        </PackageGroup>

据我所知, Permanent =“no”,应该注意在卸载时删除软件包。我甚至包括和UninstallCommand,但这也不会删除实例。

我在这里缺少什么?

如果需要任何其他信息来解决此问题,请与我们联系。 - 谢谢!

1 个答案:

答案 0 :(得分:2)

Exe包需要DetectCondition才能验证软件包是否已安装。如果你在.net exepackage中注意到你有

DetectCondition="Net4FullVersion AND (NOT VersionNT64 OR Net4x64FullVersion)"

这告诉安装程序如果条件为真,则安装此软件包。你必须在SQL exe包中做同样的事情。

DetectCondition

  

确定目标系统上是否存在包的条件。此条件可以使用内置变量和搜索返回的变量。这种情况是必要的,因为Windows不提供检测ExePackage存在的方法。 Burn使用此条件来确定在捆绑操作期间如何处理此包;例如,如果此条件为false或省略并且正在安装软件包,则Burn将安装此软件包。

您可以通过创建一些设置一些变量的注册表搜索来完成此操作。试试这个注册表搜索

<util:RegistrySearch
        Id='MicrosoftSQLInstalledCheck'
        Root='HKLM'
        Key='SOFTWARE\Microsoft\Microsoft SQL Server\$(var.InstanceName)\Setup'
        Win64='yes'
        Value='SQLPath'
        Result='exists'
        Variable='MicrosoftSQLInstalled'/>

然后在您的ExePackage for SQL中,您可以放置​​DetectCondition="MicrosoftSQLInstalled",如果注册表搜索在指定的密钥中找到了SQLPath注册表项,那么这将是真的。