我正在开发一个需要安装SQL Server 2005 Compact Edition ( SQLServerCE31-EN.msi ) 的 Windows 桌面应用程序。我在安装过程中使用InstallShield 2011作为先决条件进行安装。
为了提出先决条件定义,我使用Process Monitor来查看在手动运行SQLServerCE31-EN.msi(而不是通过安装程序)时检查了这些注册表位置:
32 位:HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server Compact Edition\v3.1
64 位:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Microsoft SQL Server Compact Edition\v3.1
大多数情况下,此检查似乎有效,如果已检测到已安装,InstallShield 会跳过先决条件。但是,即使Microsoft SQL Server 2005 Compact Edition [ENU]列在Programs and Features下,某些机器(已安装SQL Server Compact Edition 3.5的 Windows 7 Ultimate 64 位)密钥不存在。
以下两个位置(在 64 位计算机上)都有一个注册表项,可用于检查是否安装了SQL Server Compact Edition 3.5,但如果安装了 3.1,则没有任何显示。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server Compact Edition\v3.5
我相当确定可以同时安装这两个版本,并且不是 3.5 升级 3.1,即使它显然是一个较新的版本。
如何检查是否安装了 SQL Server 2005 Compact Edition?
对于那里的 InstallShield 用户,这是.prq
我们当前使用的文件:
<?xml version="1.0" encoding="UTF-8"?>
<SetupPrereq>
<conditions>
<condition Type="1" Comparison="2" Path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.1" FileName="" ReturnValue="" Bits="2"></condition>
</conditions>
<files>
<file LocalFile="<ISProjectFolder>\..\InstallShieldPreRequisites\Microsoft SQL Server 2005 Compact Edition\SQLServerCE31-EN.msi" URL="http://download.microsoft.com/download/f/5/4/f54529c6-e316-4637-a211-95818fcd4451/SQLServerCE31-EN.msi" CheckSum="54854BAC91E616BF8F71184C05AD0355" FileSize="0,1819136"></file>
</files>
<execute file="SQLServerCE31-EN.msi" cmdline="/passive /norestart" cmdlinesilent="/passive /norestart" requiresmsiengine="1"></execute>
<properties Id="{51BB3FEE-3851-4ECC-909A-C9D8EAF83254}" Description="This prerequisite installs Microsoft SQL Server 2005 Compact Edition"></properties>
</SetupPrereq>
上面的先决条件文件可以改进吗?