我正在尝试设置一个安装,以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 < v6.0 OR VersionNT64 < 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="NT AUTHORITY\NETWORK SERVICE" /AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /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,但这也不会删除实例。
我在这里缺少什么?
如果需要任何其他信息来解决此问题,请与我们联系。 - 谢谢!
答案 0 :(得分:2)
Exe包需要DetectCondition才能验证软件包是否已安装。如果你在.net exepackage中注意到你有
DetectCondition="Net4FullVersion AND (NOT VersionNT64 OR Net4x64FullVersion)"
这告诉安装程序如果条件为真,则安装此软件包。你必须在SQL exe包中做同样的事情。
确定目标系统上是否存在包的条件。此条件可以使用内置变量和搜索返回的变量。这种情况是必要的,因为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注册表项,那么这将是真的。