我有一个引导程序项目,需要检测SQL Server是否已安装。如果已安装,则跳过安装。如果不是,则应安装SQL Express 2012。exe安装程序编译得很好,然而,当我测试安装程序时,我总是得到这个错误,我找不到任何错误的原因。我正在测试的机器上安装了SQL服务器,但它仍然检测到没有安装SQL。然后继续安装,但出现错误0x858c0014:进程返回错误:无法执行EXE包。无法配置每台计算机的EXE包。
下面是我的wxs文件:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension">
<?define InstanceName = "SQLEXPRESS" ?>
<Bundle Name="EasyLobby11 Database Setup" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="4f09f7d9-f894-42b2-a865-6ae460a09c7e">
<BootstrapperApplicationRef
Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<PackageGroupRef Id="Sql2012Express"/>
</Chain>
</Bundle>
<Fragment>
<util:RegistrySearch
Id="SqlInstanceKeyFound"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
Value="InstanceName"
Result="exists"
Variable="SqlInstanceKeyFound" />
<util:RegistrySearch
Id="SqlInstanceKey"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
Value="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">
<ExePackage
Id="Sql2012Express"
DisplayName="Installing SQL Server Express 2012"
SourceFile="SQLEXPR_x86_ENU.exe"
Name="SQLEXPR_x86_ENU.exe"
DownloadUrl="http://download.microsoft.com/download/5/2/9/529FEF7B-2EFB-439E-A2D1- A1533227CD69/SQLEXPR_x86_ENU.exe "
Compressed="no"
PerMachine="yes"
Cache ="yes"
InstallCondition="(Not SqlInstanceKeyFound) AND (NOT SqlInstanceFound)"
DetectCondition= "SqlInstanceFound"
Vital="yes"
Permanent="yes"
InstallCommand="/ACTION=Install /INSTANCENAME=$(var.InstanceName) /FEATURES=SQL /SECURITYMODE=SQL [SqlVariable] /TCPENABLED=1 /SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE'" /SQLSVCSTARTUPTYPE=Manual /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /ADDCURRENTUSERASSQLADMIN=FALSE /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms"
UninstallCommand="/Action=Uninstall /INSTANCENAME=InstanceName /FEATURES=SQL /Q /HIDECONSOLE"
RepairCommand="/ACTION=Repair /INSTANCENAME=InstanceName /Q /HIDECONSOLE">
<ExitCode Value ="3010" Behavior="forceReboot" />
<dep:Provides DisplayName="Net2 SQL Server 2012 Express" Key="SQLServer2012Express,$(var.InstanceName)" Version="11.0.3000.0" />
</ExePackage>
<ExePackage Id="Sql2012ExpressUpgrade"
DisplayName="SQL Server 2012 Express Upgrade"
Cache="no"
Compressed="no"
PerMachine="yes"
Permanent="yes"
Vital="yes"
Name="SQLEXPR_x86_ENU.exe"
SourceFile="SQLEXPR_x86_ENU.exe"
DownloadUrl="http://download.microsoft.com/download/5/2/9/529FEF7B-2EFB-439E-A2D1-A1533227CD69/SQLEXPR_x86_ENU.exe "
InstallCondition="(Not SqlInstanceKeyFound) AND (NOT SqlInstanceFound)"
InstallCommand="/ACTION=Upgrade /INSTANCENAME=InstanceName /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms"
DetectCondition="NOT (SqlInstanceFound AND (SqlVersion < v11.0.0.0))">
<ExitCode Value ="3010" Behavior="forceReboot" />
</ExePackage>
<ExePackage Id="Sql2012ExpressEditionUpgrade"
DisplayName="SQL Server 2012 SP1 Express Patch"
Cache="no"
Compressed="no"
PerMachine="yes"
Permanent="yes"
Vital="yes"
Name="SQLEXPR_x86_ENU.exe"
SourceFile="SQLEXPR_x86_ENU.exe"
DownloadUrl="http://download.microsoft.com/download/5/2/9/529FEF7B-2EFB-439E-A2D1-A1533227CD69/SQLEXPR_x86_ENU.exe "
InstallCondition="(Not SqlInstanceKeyFound) AND (NOT SqlInstanceFound)"
InstallCommand="/ACTION=Patch /INSTANCENAME=$(var.InstanceName) /Q /HIDECONSOLE /SkipRules=RebootRequiredCheck /IAcceptSQLServerLicenseTerms"
DetectCondition="NOT (SqlInstanceFound AND (SqlVersion > v11.0.0.0) AND (SqlVersion < v11.0.3000.0))">
<ExitCode Value ="3010" Behavior="forceReboot" />
</ExePackage>
</PackageGroup>
</Fragment>
</Wix>发布于 2014-08-22 14:49:16
配置SQL是一项相当复杂的工作。
我最近刚开始为我的项目做Wix Packaging。实际上,我从你的配置开始,对配置做了一些调整。我还负责处理基于系统类型的x86和x64打包。
如果它们与您无关,您可以省略它们中的任何一个。因此,我正在发布我的配置的工作副本,以便它可能会对您有所帮助。
<Fragment>
<?define InstanceName = "SQLEXPRESS" ?>
<util:RegistrySearch Id="SQL2012x64InstanceExists"
Variable="SQL2012x64InstanceExists"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
Value="$(var.InstanceName)"
Win64="yes"
Result="exists"/>
<util:RegistrySearch Id="SQL2012x64InstanceKey"
Variable="SQL2012x64InstanceKey"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
Value="$(var.InstanceName)"
Win64="yes"
After="SQL2012x64InstanceExists"
Condition="SQL2012x64InstanceExists" />
<util:RegistrySearch Id="SQL2012x64InstanceInstalled"
Variable="SQL2012x64InstanceInstalled"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SQL2012x64InstanceKey]"
Result="exists"
Win64="yes"
After="SQL2012x64InstanceKey"
Condition="SQL2012x64InstanceExists" />
<util:RegistrySearch Id="SQLx64Version"
Variable="SQLx64Version"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SQL2012x64InstanceKey]\Setup"
Value="Version"
Win64="yes"
After="SQL2012x64InstanceKey"
Condition="SQL2012x64InstanceInstalled" />
<util:RegistrySearch Id="SQL2012x86InstanceExists"
Variable="SQL2012x86InstanceExists"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
Value="$(var.InstanceName)"
Win64="no"
Result="exists"/>
<util:RegistrySearch Id="SQL2012x86InstanceKey"
Variable="SQL2012x86InstanceKey"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"
Value="$(var.InstanceName)"
Win64="no"
After="SQL2012x86InstanceExists"
Condition="SQL2012x86InstanceExists" />
<util:RegistrySearch Id="SQL2012x86InstanceInstalled"
Variable="SQL2012x86InstanceInstalled"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SQL2012x86InstanceKey]"
Result="exists"
Win64="no"
After="SQL2012x86InstanceKey"
Condition="SQL2012x86InstanceExists" />
<util:RegistrySearch Id="SQLx86Version"
Variable="SQLx86Version"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SQL2012x86InstanceKey]\Setup"
Value="Version"
Win64="no"
After="SQL2012x86InstanceKey"
Condition="SQL2012x86InstanceInstalled" />
<PackageGroup Id="SQLServer2012Express">
<ExePackage Id="SQL2012Expressx64"
InstallCondition="VersionNT64 AND NOT SQL2012x64InstanceInstalled"
SourceFile="$(var.MyDir)\SQLEXPR_x64_ENU.exe"
DisplayName="Installing Microsoft® SQL Server® 2012 - Express Edition..."
InstallCommand="/ACTION=Install /INSTANCENAME=SQLEXPRESS /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"
Permanent="yes"/>
<ExePackage Id="SQL2012Updatex64"
InstallCondition="VersionNT64 AND (SQL2012x64InstanceInstalled AND SQLx64Version < v11.0.0.0)"
DisplayName="Upgrading SQL Server to SQL Server Express 2012..."
InstallCommand='/IACCEPTSQLSERVERLICENSETERMS /HIDECONSOLE /ACTION=Upgrade /QUIET=True /INSTANCENAME=SQLEXPRESS /SkipRules=RebootRequiredCheck'
SourceFile="$(var.MyDir)\SQLEXPR_x64_ENU.exe"
Permanent="yes"/>
<ExePackage Id="SQL2012Expressx86"
InstallCondition="NOT VersionNT64 AND NOT SQL2012x86InstanceInstalled"
SourceFile="$(var.MyDir)\SQLEXPR_x86_ENU.exe"
DisplayName="Installing Microsoft® SQL Server® 2012 - Express Edition..."
InstallCommand="/ACTION=Install /INSTANCENAME=SQLEXPRESS /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"
Permanent="yes"/>
<ExePackage Id="SQL2012Updatex86"
InstallCondition="NOT VersionNT64 AND (SQL2012x86InstanceInstalled AND SQLx86Version < v11.0.0.0)"
DisplayName="Upgrading SQL Server to SQL Server Express 2012..."
InstallCommand='/IACCEPTSQLSERVERLICENSETERMS /HIDECONSOLE /ACTION=Upgrade /QUIET=True /INSTANCENAME=SQLEXPRESS /SkipRules=RebootRequiredCheck'
SourceFile="$(var.MyDir)\SQLEXPR_x86_ENU.exe"
Permanent="yes"/>
</PackageGroup>
希望能对你有所帮助。
-- Naga Sreenivas Gupta V
https://stackoverflow.com/questions/23166064
复制相似问题