检查SQL CE是否已安装的最佳方法,如果是,那么是什么版本?

时间:2008-11-02 03:00:47

标签: .net sql vb.net sql-server-ce

我编写了一个使用SQL CE 3.5的VB.NET应用程序。我很好奇是否有人有任何最佳实践或代码来帮助检查是否安装了A)SQL CE和B)如果是,那么什么版本。

我搜索了msdn和google,但我找不到任何有用的东西。我在注册表中查找并找到了这个键: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server Compact Edition \ v3.5 字符串值为“Version”,数据为3.5.5692.0。

因此,我的假设是检查是否存在此密钥,但它困扰我,因为“3.5”键肯定听起来像是与3.5 DLL绑定。我想说的是,如果他们有SQL CE(在这里插入一些未来版本的CE),我不想强​​迫某人安装SQL 3.5。

其他信息: 目标框架:.NET 2.0 最低目标操作系统:Windows XP SP2

5 个答案:

答案 0 :(得分:2)

不确定您是在Windows机器还是便携式设备上讨论SQL CE。在PC上,最好的办法是在应用程序中分发SQL CE版本。您可以在http://www.microsoft.com/Sqlserver/2005/en/us/compact-redistribute.aspx注册获取相关权限。

答案 1 :(得分:1)

正如BlackWasp所指出的,最好的方法是将SqlServerCe-程序集与您的应用程序一起分发。如果要检查数据库文件(SDF文件)的版本,应该查看here

希望这有帮助。

答案 2 :(得分:1)

广泛接受的方法是检查MSI安装程序保存在注册表中的产品标识符(GUID)。如果您没有安装有问题的产品,您可以使用名为Orca(Windows SDK的一部分)的工具破解MSI并以此方式获取GUID。大多数(如果不是所有)安装构建器都有一个操作或任务可以作为预请求测试的一部分,甚至VS2005 / 2008也具有此功能。

要检查版本,我会在注册表中再次挖掘,或者查看文件版本。

答案 3 :(得分:1)

这是我的解决方案。它为我的安装文件添加了5兆,但它现在也可以脱机安装。安装需要几秒钟的时间,但它始终是正确的。

为什么这应该是事实上的解决方案:

  • 确保程序安装正确应由该功能的安装人员负责
  • 您总是希望最终结果是安装了SQL Server CE(即使用户对原始安装感到愤怒)
  • 它只有5兆(但你还可以使用下载)

        DownloadUrl="http://download.microsoft.com/download/0/5/D/05DCCDB5-57E0-4314-A016-874F228A8FAD/SSCERuntime_x86-ENU.exe"
        SourceFile="SSCERuntime_x86-ENU.exe"
        Compressed="no"
    

这是我的解决方案:

<PackageGroup Id="SQLExpressCE">
  <ExePackage
        Vital="yes"
        SourceFile="SSCERuntime_x86-ENU.exe"
        InstallCondition="NOT VersionNT64"

        //Include the exes(only about 2.5 megs each)
        //Setting this to no causes your bootstrapper to download on installation but since this will always be trying to install, it is probably best to include it
        Compressed="yes"

        //install quietly without an interface
        InstallCommand="/i /quiet /n"
        />
  <ExePackage
        Vital="yes"
        InstallCondition="VersionNT64" 
        SourceFile="SSCERuntime_x64-ENU.exe"
        Compressed="yes"
        InstallCommand="/i /quiet /n"
        />
</PackageGroup>

答案 4 :(得分:0)

好的,这只能回答你问题的第一部分,但希望它无论如何都有用...... 这就是我目前使用的:

<Fragment>
    <util:RegistrySearch
          Id='SearchForSQLCE'
          Variable="SQLCEInstalled"
          Result="exists"
          Root="HKLM"
          Key="SOFTWARE\Classes\Microsoft SQL Server Compact Edition Database File"
          Win64="yes"
               />
  </Fragment>