2

我正在开发一个需要安装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="&lt;ISProjectFolder&gt;\..\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>

上面的先决条件文件可以改进吗?

4

2 回答 2

2

您可以使用 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products 配置单元中的产品代码来检查是否安装了 SQL Server CE 3.1。

例如 SQL CE 3.5 的产品代码是 {F0B430D1-B6AA-473D-9B06-AA3DD01FD0B8}

我们将在注册表中找到以下内容:(注意代码已经做了一些转移)HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\1D034B0FAA6BD374B960AAD30DF10D8B

您可以通过 ORCA 工具找到 SQL CE 3.1 产品代码。以下是详细步骤:

启动 ORCA 软件 用 ORCA 打开 SQL CE 3.1 msi 文件 点击 Property 并检查右侧面板中的 Product Code

下载:ORCA MSI 编辑器 http://www.technipages.com/download-orca-msi-editor.html

希望这会有所帮助……</p>

于 2010-10-21T05:55:34.930 回答
1

答案的简短版本:

感谢 Microsoft 的 Robbie Meng 的帮助,我们发现检查此注册表项是检查先决条件是否已安装的可靠方法:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\1D034B0FAA6BD374B960AAD30DF10D8B
于 2010-10-21T14:17:43.013 回答